nodejs处理url中的百分号编码

写网站的时候,前端表单发送数据到nodejs服务器,发送的数据会出现一些乱码,像下面这样:

nickname=%E5%B0%8F%E5%88%98&gender=%E7%94%B7&email=12345%40qq.com&password=xiaoliu

百分号编码原理

上网查了后发现,百分号编码(也被称为URI编码)的产生是为了防止SQL注入,所以将一些特殊字符转换为对应的百分号编码。详细原理可以去看下面的博客。
url 编码(percentcode 百分号编码)

nodejs如何解码

这里主要讲几种百分号编码nodejs环境下的解码方式。

decodeURI()函数
let url = "nickname=%E5%B0%8F%E5%88%98&gender=%E7%94%B7&email=12345%40qq.com&password=xiaoliu"
let decode_url = decodeURI(url)
console.log(decode_url)

控制台打印出来的结果如下:

'nickname=小刘&gender=男&email=12345%40qq.com&password=xiaoliu'

可以看到“%40”(也就是“@”)没有转换,这是因为“@”在encodeURI()函数中属于保留字符,不会转换换为百分号编码,所以对应的解码函数decodeURI()也不会对其进行解码。(上面的url是edge浏览器提交表单的时候产生的,其他几个主流的浏览器不知道“@”符号会不会被编码)

decodeURIComponent()函数

“@”“#”“$”…等符号不属于encodeURIComponent()函数的保留字,所以其对应的解码函数decodeURIComponent()函数可以将“%40”转为“@”符号。

let url = "nickname=%E5%B0%8F%E5%88%98&gender=%E7%94%B7&email=12345%40qq.com&password=xiaoliu"
let decode_url = decodeURIComponent(url)
console.log(decode_url)

控制台的输出如下:

'nickname=小刘&gender=男&email=12345@qq.com&password=xiaoliu'

解码成功!

自己写解码函数

这个大家可以看看,理解一下解码的过程,其实挺简单的。

function decode(url) {let reg = /(%(\w|[abcdef])(\w|[abcdef]))+/g   let code = url.match(reg)let replace_reg = /%/glet decode_reg = /(%(\w|[abcdef])(\w|[abcdef]))+/for(let i = 0; i < code.length; i ++) {code[i] = code[i].replace(replace_reg, "")    //去掉百分号code[i] = new Buffer(code[i], "hex").toString()  //转换为utf-8字符url = url.replace(decode_reg, code[i])  //替换百分号编码}return url
}

先将编码段用正则表达示匹配出来,存在code数组中。然后将code数组中的代码段去掉百分号,形成的十六进制编码段再转换为对应的编码(这里页面的编码为utf-8,有时候页面编码可能是gb2312,注意区分清楚),最后用生成的字符替换url中的百分号编码。

nodejs的"querystring"中也有相应的解码函数,详细可以参考nodejs的API文档。

nodejs处理url中的百分号编码相关推荐

  1. 网址URL中特殊字符转义编码

    网址URL中特殊字符转义编码 字符    -    URL编码值 空格    -    %20 "          -    %22 #         -    %23 %       ...

  2. 浏览器URL中特殊字符转义编码

    网址URL中特殊字符转义编码 字符    -    URL编码值 空格    -    %20 "          -    %22 #         -    %23 %       ...

  3. 淘宝url中的spm编码是怎么生成的呢?

    淘宝url中的spm编码是怎么生成的?生成使用了什么技术?是怎么回事呢 越详细越好. 下面是SPM淘宝说明: SPM是淘宝社区电商业务(xTao)为外部合作伙伴(外站)提供的一套跟踪引导成交效果数据的 ...

  4. c语言 字符串 url,如何对URL字符串进行百分号编码

    在和web服务进行交互时,我们经常需要对URL中的特定字符和传输的表单数据进行百分号编码.例如,'&'在百分号编码时会变成'%26'.搞清楚 URL中哪部分的哪些字符应该进行百分号编码了并不是 ...

  5. c语言中百分号ld是什么意思,URL 中的百分号的麻烦

    最近在 ASP.NET 2.0 中,需要将一组字节(byte[])用 GET 参数传递到另一个 .aspx 页面,采取的办法是进行 BASE64 编码.首先将 byte[] 进行 BASE64 编码( ...

  6. java对url参数编码_对URL中的参数编码和解码

    有时,我们希望点击页面中的链接跳转其他页面,并且以get的方式传递一些参数.如果不对这些参数编码,可能会造成一些问题: 1.  参数中的空格可能会让你无法打开页面 2.  参数中的&符号会影响 ...

  7. JS中URL中的特殊字符问题:escape,encodeURI,encodeURIComponent(转)

    在使用url进行参数传递时,经常会传递一些中文名(或含有特殊字符)的参数或URL地址,在后台处理时会发生转换错误.在有些传递页面使用GB2312,而在接收页面使用UTF8,这样接收到的参数就可能会与原 ...

  8. 在URL中传递中文的解决方式

    在URL中传递中文的解决方式 2015年05月13日 17:13:55 thinkinglink 阅读数:10321 标签: URL编码中文编码乱码解决 更多 个人分类: web前端 在URL中传递中 ...

  9. apache AllowEncodedSlashes 允许URL中对路径分隔符进行编码

    2013年11月29日 10:35:32 情景: 你想通过在当前的URL中记录来源页面的URL,以便处理完请求后再跳转回来源页: http://www.example1.com/refer/http: ...

最新文章

  1. 关于寒假和春季开学!教育部通知来了!近400所高校寒假时间已公布!
  2. php和android选择器,Android_android 字体颜色选择器(ColorPicker)介绍,primary_text_yellow.xml 复制代码 代 - phpStudy...
  3. http超文本传输协议的http头部分析
  4. 哈尔滨工程大学ACM预热赛
  5. 组合模式_[设计模式]10.组合模式
  6. ds排序--希尔排序_图解直接插入排序和希尔排序
  7. Autowired注解
  8. Flyway 数据库脚本版本控制工具
  9. Atcoder Yahoo Programming Contest 2019 简要题解
  10. selenium webdirver之ruby-开发ide乱码解决方案
  11. css的盒子模型以及布局(面试考点)
  12. 四年级计算机教学实录,四年级信息技术《媒体播放器》教学设计
  13. Web压力测试和手机App测试
  14. sdk环境变量配置win10_sdk环境变量配置好检查
  15. ExtJs6 响应式布局
  16. Android 课程表
  17. FFMPEG开发之——视频转码
  18. python股票接口_在Python中使用股票接口
  19. mysql查询所有男生中姓王的_MySQL的查询练习
  20. raid, scsi_host pics

热门文章

  1. AM62X+FPGA+AD+vxworks实时操作系统数据采集处理解决方案
  2. 2006年德国世界杯各国参赛球队口号
  3. rEFind配置忽略项以及主题~win/deepin/arch -- update-grub:未找到命令
  4. php领导手写字迹,央视名嘴董倩的手写体感谢信曝光,字迹潇洒飘逸,颠覆你的审美...
  5. Unity 龙骨2D换装
  6. python bpython 包
  7. 高精度 A+B Problem
  8. spring之i18n
  9. Vue-i18n与Vuex-i18n等vue的国际化方案
  10. 我发朋友圈并不是为了取悦你