`

get请求url后带有特殊字段被截断

 
阅读更多
项目中碰到:
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。

分享到:
评论

相关推荐

    4中url请求方式,包括http和spring自带请求

    在IT行业中,网络通信是核心部分之一,而URL(统一资源定位符)请求方式是实现这一通信的关键。本文将深入探讨四种主要的URL请求方式,包括HTTP基础请求方法以及Spring框架中的请求工具类。我们将讨论它们的工作原理...

    HTTP各状态码生成原理,请求头、响应头各字段含义(爬虫深入必备知识).docx

    例如,GET请求成功时,资源会被返回;POST请求成功时,结果通常在响应体中。 201 Created 表示服务器已创建了新的资源,通常在POST请求后返回,新的资源地址会在响应体或Location头中给出。 202 Accepted 说明...

    C++实现HTTP GET,POST请求

    C++实现POST请求时,除了构造请求头,还需添加Content-Length字段表示请求体的长度,以及实际的请求体内容: ```cpp void sendHttpPostRequest(const std::string& url, const std::string& postData) { // 同样...

    Java如何实现URL带请求参数(get/post)及得到get和post请求url和参数列表的方法

    首先,我们来看如何发送带有参数的GET和POST请求。在Java中,我们可以使用`java.net.URL`和`java.net.URLConnection`类来实现这个功能。 1. **发送GET请求**: ```java public static String sendGet(String url,...

    HTTP请求(包括GET与POST请求)

    同时,GET请求的数据会暴露在URL中,因此不适合传递敏感信息,且长度有限制,通常不超过2KB。 POST请求则常用于向服务器提交数据,例如表单提交。POST请求可以携带大量数据,其数据隐藏在请求体中,相对安全,但...

    html页面模式get/post请求

    而POST则常用于向服务器发送数据,如表单提交,数据被包含在请求正文中,这对于传输大量或敏感数据更为安全。 HTML表单是用户与网页交互的重要方式,它们可以触发GET或POST请求。在HTML中,`<form>`标签用于定义...

    java使用url发送post和get请求:HttpConnUtils.jar

    记住,GET请求适用于不敏感的数据,而POST请求适用于敏感或大量数据的传输,因为GET请求的参数会显示在URL上,可能留下安全风险。在实际开发中,应考虑安全性、性能和HTTP规范来选择合适的请求方法。

    Node.js-基于HTTP请求头重建HTTP请求中使用的原始URL

    为了简化这个过程,有一些第三方库,如`original-url`,可以帮助我们更方便地从HTTP请求头中提取和构建原始URL。例如,`original-url`库会处理代理服务器转发的请求,考虑`X-Forwarded-Proto`、`X-Forwarded-Host`和...

    HTTP协议详解(请求、响应、URL等)

    - **请求行**:包含请求方法(如GET或POST)、请求资源的URL以及使用的HTTP协议版本。 - **请求头部**:包含了多个键值对,用来提供关于请求的附加信息,例如用户代理信息、接受的内容类型等。 - **消息体**:仅出现...

    JS过滤url参数特殊字符的实现方法

    在URL传递参数中,有一些特殊字符,而这些些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的编码了。下表中列出了一些URL特殊符号及编码十六进制值 1. + URL 中+号表示空格 + 2. ...

    GET请求https,post请求https

    然而,GET请求通常不适用于敏感数据传输,因为其请求参数会出现在URL中,可能导致数据泄露。POST请求则更适合处理敏感信息,如登录密码、信用卡号等。 在实际应用中,GET请求通常用于浏览网页、查询信息等无副作用...

    c# http协议,实现get或post发送请求 并返回内容

    GET请求对数据量有限制,一般不超过2KB。 2. POST:POST请求则用于向服务器发送数据,通常用于提交表单或者上传文件。POST请求的数据包含在请求体中,对数据量无明显限制,且数据对用户不可见。 在C#中,我们可以...

    Delphi两种方法演示HTTP请求:GET/POST.rar

    GET/POST方法使用演示,程序将演示使用这两种方法建立会话、建立一个http请求句柄、发送一个指定请求到httpserver、接收header信息和一个http请求、指向一个接收请求信息的缓冲区的指针、取得url的主机名和文件名等...

    MTK中使用socket实现http的get请求

    一个标准的GET请求通常包括URL(统一资源定位符),其中包含了要请求的资源路径。HTTP头可能包含其他信息,如用户代理、接受的编码格式等。在实现过程中,我们需要构造这样的请求字符串,并通过socket发送到服务器。...

    http两种请求方式post和get请求的区别

    - GET 请求:由于数据在 URL 中可见,容易被第三方截取,不适合存储或传输敏感数据。GET 请求在浏览器历史记录、缓存和搜索引擎索引中都可被保留,增加了数据暴露的风险。 - POST 请求:数据在请求体中传输,较...

    解决了中文乱码的http的get和post请求demo

    在GET请求中,参数通常被编码后附加在URL后面。Java的`URLEncoder.encode()`方法可以用来对参数进行编码,但默认使用的是ISO-8859-1编码,不支持中文。因此,我们需要明确指定为UTF-8编码,例如: ```java String...

    GET请求方式

    1. 可缓存:GET请求可以被浏览器缓存,以便下次请求相同资源时直接使用缓存,提高响应速度。 2. 可收藏:因为GET请求不修改服务器状态,所以可以被浏览器收藏为书签。 3. 易于调试:GET请求通常显示在浏览器的地址栏...

    C++进行http请求,并获取返回结果

    4. **设置请求选项**:设置请求的URL和其他选项,如HTTP方法(GET),超时时间等。使用`curl_easy_setopt`函数完成这些操作。 ```cpp curl_easy_setopt(curl, CURLOPT_URL, "http://m.hbgajg.com/"); ``` 5. **...

    基于Labview的HTTP的GET与POST请求示例

    响应包含关于请求的状态信息以及可能被请求的内容。 两种 HTTP 请求方法:GET 和 POST 在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST。 GET - 从指定的资源请求数据。 POST - 向指定...

    用CSS实现超长字段被省略的简单方法

    用CSS实现超长字段被省略的简单方法! 值得下载看看!资源免费,大家分享!! 更多免费资源 http://ynsky.download.csdn.net

Global site tag (gtag.js) - Google Analytics