今天遇到一个问题,在向一个地址发起get请求时,某个参数是这种形式:foo=xx&&yyyy,其中"&&"是参数值的一部分,在调用这个接口时,后台收到的参数值不正确,变成了这种形式:

name: xx
(empty)
yyyy:

这个传递的参数是encodeURI处理过的,本以为encodeURI后就万无一失了,不过从请求参数来看,encodeURI并不能应对这种情况,出现这个错误可以观察出来,是因为:当遇到第一个&时,被解析为一个新的参数,于是第一个参数foo的值为xx,由于第一个&又紧跟了一个&,于是这个参数没有name和value,被解析成(empty),第二个&后面name被解析为yyyy,导致出现了现在的错误。

通过搜索,发现了原来encodeURI是用于对URI进行编码的,它不能编码这些字符:;/?:@&=+$,#,对于参数的编码要使用encodeURIComponent方法。

文章详见:escape()、encodeURI()、encodeURIComponent()区别详解。这篇文章还详细比较了escape, encodeURI, encodeURIComponent方法的区别,值得一看。

总结

对于整个URI的编码,使用encodeURI,对于某个参数的编码,使用encodeURIComponent。

URI编码时遇到特殊字符的处理方式的更多相关文章

  1. [置顶] 程序员必知(三):一分钟知道URI编码(encodeURI)

    因为浏览器会用一些特殊的字符作为特定的意义,所以在要传输的内容上如果有这些特殊的字符的话,就需要对其进行转义才能正确传输,如以下字符为发送时候的关键字,即特殊字符 ;/?:@&=+$,# 所以 ...

  2. JavaScript及C# URI编码详解

    转载自:http://www.cnblogs.com/artwl/archive/2012/03/07/2382848.html 应用Uri编码,可以把一个或多个Uri作为另一个Uri的参数(如果不用 ...

  3. 从此不再惧怕URI编码:JavaScript及C# URI编码详解

    混乱的URI编码 JavaScript中编码有三种方法:escape.encodeURI.encodeURIComponent C#中编码主要方法:HttpUtility.UrlEncode.Serv ...

  4. encodeURIComponent编码时为什么要编码两次

    Why 要对url进行编码? 当使用地址栏提交查询参数时,如果不编码,非英文字符会按照操作系统的字符集进行编码提交到服务器,服务器会按照配置的字符集进行解码,所以如果两者不一致就会导致乱码.   Wh ...

  5. Uri编码,包括javascript前端与C#服务器端

    URI编码的方法汇总 javascript中的编码有三种方法:escape.encodeURI.encodeURIComponent C#中编码的主要方法:HttpUtility.UrlEncode. ...

  6. [转] 从此不再惧怕URI编码:JavaScript及C# URI编码详解

    混乱的URI编码 JavaScript中编码有三种方法:escape.encodeURI.encodeURIComponent C#中编码主要方法:HttpUtility.UrlEncode.Serv ...

  7. HTTP post get request 时遇到特殊字符 ! @ # $ % ^ & * ( )

    HTTP post get request 时遇到特殊字符 ! @ # $ % ^ & * ( ) 使用对应的编码替代 例如: curl ftp://username:pass@word@ex ...

  8. URI编码解码和base64

    概述 对于uri的编解码,在js中有3对函数,分别是escape/unescape,encodeURI/decodeURI,encodeURIComponent/decodeURIComponent. ...

  9. webapi 控制器接收POST参数时必须以对象的方式接收

    webapi    控制器接收POST参数时必须以对象的方式接收

随机推荐

  1. js鼠标拖动(转载)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. kafka命令大全

    kafka命令大全 http://orchome.com/454

  3. Java如何运行一个class文件的main方法

    假设如下目录有个class文件,并且里面有main方法: d:\workspace\eclipse\com\JavaCore\classloader\MyClassLoader.class 首先进入c ...

  4. java中的静态变量、静态方法与静态代码块详解与初始化顺序

      我们知道类的生命周期分为装载.连接.初始化.使用和卸载的五个过程.其中静态代码在类的初始化阶段被初始化. 而非静态代码则在类的使用阶段(也就是实例化一个类的时候)才会被初始化. 静态变量 可以将静 ...

  5. django 补充和中间件

    配置 from django.conf import settings form组件 from django.forms import Formfrom django.forms import fie ...

  6. 一个简单的gridlayout栗子

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. 【亲测】502 Bad Gateway 怎么解决?

    502 Bad Gateway 怎么解决? 1.什么是502 badgateway 报错 简单来说 502 是报错类型代码,bad gateway 错误的网关. 2.产生错误的原因 连接超时 具体原因 ...

  8. win10 安全设置

    风险程序:   C:\Users\dong\Downloads\KMSTools_V18.06.2016_Xitongzhijia\KMSTools.exe 发起来源:C:\Windows\Syste ...

  9. python大法好——Python 面向对象

    Python 面向对象  Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的. 面向对象技术简介 类(Class): 用来描述具有相同的属性和方法 ...

  10. linux目录与文件权限的意义

    现在我们已经知道了Linux系统内文件的三种身份(所有者,用户者,与其他人),知道每种身份都有三种属性(r,w,x),已经能够使用chown,chgrp,chmod去修改这些权限和属性,那么这些文件权 ...