项目中碰到:
get请求中url带有特殊字符参数如: url = xxxx?name=#123&num=12&xxx=xx,导致后面传到后台时name的值为空及#123&num=12&xxx=xx参数都被截断。
解决方案:
1)将get请求改为post请求
2)根据项目实际情况,对特殊字符有限定输入的话可以使用encodeURIComponent(), escape(),encodeURI()对字符串进行编码。
拓展:
当参数值中含有特殊字符 ?!=()#%& 的时候,也会出现url被截断的情况。
一下是对几个函数的解释:
1 escape()函数
定义和用法
escape() 函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串。
语法
escape(string)
参数 描述
string 必需。要被转义或编码的字符串。
返回值
已编码的 string 的副本。其中某些字符被替换成了十六进制的转义序列。
说明
该方法不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。其他所有的字符都会被转义序列替换。
2 encodeURI()函数
定义和用法
encodeURI() 函数可把字符串作为 URI 进行编码。
语法
encodeURI(URIstring)
参数 描述
URIstring 必需。一个字符串,含有 URI 或其他要编码的文本。
返回值
URIstring 的副本,其中的某些字符将被十六进制的转义序列进行替换。
说明
该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。
该方法的目的是对 URI 进行完整的编码,因此对以下在 URI 中具有特殊含义的 ASCII 标点符号,encodeURI() 函数是不会进行转义的:;/?:@&=+$,#
3 encodeURIComponent() 函数
定义和用法
encodeURIComponent() 函数可把字符串作为 URI 组件进行编码。
语法
encodeURIComponent(URIstring)
参数 描述
URIstring 必需。一个字符串,含有 URI 组件或其他要编码的文本。
返回值
URIstring 的副本,其中的某些字符将被十六进制的转义序列进行替换。
说明
该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。
其他字符(比如 :;/?:@&=+$,# 这些用于分隔 URI 组件的标点符号),都是由一个或多个十六进制的转义序列替换的。
提示和注释
提示:请注意 encodeURIComponent() 函数 与 encodeURI() 函数的区别之处,前者假定它的参数是 URI 的一部分(比如协议、主机名、路径或查询字符串)。因此 encodeURIComponent() 函数将转义用于分隔 URI 各个部分的标点符号。
4 总结:
通过对三个函数的分析,我们可以知道:escape()除了 ASCII 字母、数字和特定的符号外,对传进来的字符串全部进行转义编码,因此如果想对URL编码,最好不要使用此方法。而encodeURI() 用于编码整个URI,因为URI中的合法字符都不会被编码转换。encodeURIComponent方法在编码单个URIComponent(指请求参 数)应当是最常用的,它可以讲参数中的中文、特殊字符进行转义,而不会影响整个URL。
分享到:
相关推荐
在IT行业中,网络通信是核心部分之一,而URL(统一资源定位符)请求方式是实现这一通信的关键。本文将深入探讨四种主要的URL请求方式,包括HTTP基础请求方法以及Spring框架中的请求工具类。我们将讨论它们的工作原理...
例如,GET请求成功时,资源会被返回;POST请求成功时,结果通常在响应体中。 201 Created 表示服务器已创建了新的资源,通常在POST请求后返回,新的资源地址会在响应体或Location头中给出。 202 Accepted 说明...
C++实现POST请求时,除了构造请求头,还需添加Content-Length字段表示请求体的长度,以及实际的请求体内容: ```cpp void sendHttpPostRequest(const std::string& url, const std::string& postData) { // 同样...
首先,我们来看如何发送带有参数的GET和POST请求。在Java中,我们可以使用`java.net.URL`和`java.net.URLConnection`类来实现这个功能。 1. **发送GET请求**: ```java public static String sendGet(String url,...
同时,GET请求的数据会暴露在URL中,因此不适合传递敏感信息,且长度有限制,通常不超过2KB。 POST请求则常用于向服务器提交数据,例如表单提交。POST请求可以携带大量数据,其数据隐藏在请求体中,相对安全,但...
而POST则常用于向服务器发送数据,如表单提交,数据被包含在请求正文中,这对于传输大量或敏感数据更为安全。 HTML表单是用户与网页交互的重要方式,它们可以触发GET或POST请求。在HTML中,`<form>`标签用于定义...
记住,GET请求适用于不敏感的数据,而POST请求适用于敏感或大量数据的传输,因为GET请求的参数会显示在URL上,可能留下安全风险。在实际开发中,应考虑安全性、性能和HTTP规范来选择合适的请求方法。
为了简化这个过程,有一些第三方库,如`original-url`,可以帮助我们更方便地从HTTP请求头中提取和构建原始URL。例如,`original-url`库会处理代理服务器转发的请求,考虑`X-Forwarded-Proto`、`X-Forwarded-Host`和...
- **请求行**:包含请求方法(如GET或POST)、请求资源的URL以及使用的HTTP协议版本。 - **请求头部**:包含了多个键值对,用来提供关于请求的附加信息,例如用户代理信息、接受的内容类型等。 - **消息体**:仅出现...
在URL传递参数中,有一些特殊字符,而这些些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的编码了。下表中列出了一些URL特殊符号及编码十六进制值 1. + URL 中+号表示空格 + 2. ...
然而,GET请求通常不适用于敏感数据传输,因为其请求参数会出现在URL中,可能导致数据泄露。POST请求则更适合处理敏感信息,如登录密码、信用卡号等。 在实际应用中,GET请求通常用于浏览网页、查询信息等无副作用...
GET请求对数据量有限制,一般不超过2KB。 2. POST:POST请求则用于向服务器发送数据,通常用于提交表单或者上传文件。POST请求的数据包含在请求体中,对数据量无明显限制,且数据对用户不可见。 在C#中,我们可以...
GET/POST方法使用演示,程序将演示使用这两种方法建立会话、建立一个http请求句柄、发送一个指定请求到httpserver、接收header信息和一个http请求、指向一个接收请求信息的缓冲区的指针、取得url的主机名和文件名等...
一个标准的GET请求通常包括URL(统一资源定位符),其中包含了要请求的资源路径。HTTP头可能包含其他信息,如用户代理、接受的编码格式等。在实现过程中,我们需要构造这样的请求字符串,并通过socket发送到服务器。...
- GET 请求:由于数据在 URL 中可见,容易被第三方截取,不适合存储或传输敏感数据。GET 请求在浏览器历史记录、缓存和搜索引擎索引中都可被保留,增加了数据暴露的风险。 - POST 请求:数据在请求体中传输,较...
在GET请求中,参数通常被编码后附加在URL后面。Java的`URLEncoder.encode()`方法可以用来对参数进行编码,但默认使用的是ISO-8859-1编码,不支持中文。因此,我们需要明确指定为UTF-8编码,例如: ```java String...
1. 可缓存:GET请求可以被浏览器缓存,以便下次请求相同资源时直接使用缓存,提高响应速度。 2. 可收藏:因为GET请求不修改服务器状态,所以可以被浏览器收藏为书签。 3. 易于调试:GET请求通常显示在浏览器的地址栏...
4. **设置请求选项**:设置请求的URL和其他选项,如HTTP方法(GET),超时时间等。使用`curl_easy_setopt`函数完成这些操作。 ```cpp curl_easy_setopt(curl, CURLOPT_URL, "http://m.hbgajg.com/"); ``` 5. **...
响应包含关于请求的状态信息以及可能被请求的内容。 两种 HTTP 请求方法:GET 和 POST 在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST。 GET - 从指定的资源请求数据。 POST - 向指定...
用CSS实现超长字段被省略的简单方法! 值得下载看看!资源免费,大家分享!! 更多免费资源 http://ynsky.download.csdn.net