`

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。

分享到:
评论

相关推荐

    java HttpClient 发送GET请求和带有表单参数的POST请求教程例子

    ### Java HttpClient 发送GET请求和带有表单参数的POST请求详解 #### 一、概述 在Java编程中,处理HTTP请求是一项常见的需求,特别是在与Web服务进行交互时。Apache HttpClient库提供了一种强大的方法来执行HTTP...

    php获取URL中带#号等特殊符号参数的解决方法

    本篇知识点将详细探讨如何在PHP中获取带有特殊符号,如井号(#)的URL参数,并介绍如何使用JavaScript的escape函数对这些特殊字符进行编码,从而实现正确地在服务器端获取这些参数。 首先,我们来看看URL编码的基础...

    asp.net 请求url 获取返回值

    以上代码片段展示了如何在ASP.NET中使用异步操作来请求URL并获取返回值,这将有助于提高应用程序的性能和用户体验。在处理网络请求时,确保理解并合理使用同步和异步操作,是优化ASP.NET应用程序的关键。

    tomcat8get请求url格式问题

    原因:由于tomcat的新版本增加了一个新特性,就是严格按照 RFC 3986规范进行访问解析,而 RFC 3986规范定义了Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符(RFC3986中指定了...

    VC++ HTTP Get Post请求

    在VC++编程环境中,HTTP(超文本传输协议)Get和Post请求是常见的网络通信方法,用于从或向服务器发送数据。这两个方法是Web应用程序与服务器交互的基础,理解它们的工作原理和如何在VC++中实现至关重要。 **HTTP ...

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

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

    C# http Get/POST请求封装类

    这两种方法的安全性和可缓存性也有所不同,GET请求的参数显示在URL上,易于被记录,而POST请求的数据则包含在请求体中,相对更安全。 在C#中,我们可以使用`System.Net.Http`命名空间下的HttpClient类来发送HTTP...

    android http Get 请求

    在Android应用开发中,HTTP Get请求是连接服务器获取数据的一种常见方式。本文将详细解析如何在Android中实现HTTP Get请求,以及与之相关的网络请求概念和技术。 首先,我们需要理解HTTP协议的基本原理。HTTP(超...

    C++实现HTTP GET,POST请求

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

    C#的http发送post和get请求源码

    - 在`FrmTestHttpPost`类中,可能会有一个按钮事件,当用户点击按钮时,调用`HttpClient`发送GET或POST请求。请求的结果可以通过`HttpResponseMessage`的`Content`属性读取,然后显示在窗体的某个控件上。 6. **...

    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>`标签用于定义...

    C# 使用Get和Post请求获取数据

    在URL(统一资源定位符)中,所有通过GET请求传递的数据都会作为查询字符串附加在URL后面,因此它们对用户可见且会被记录在浏览器的历史记录中。这限制了GET请求能传递的数据量,因为URL长度有限制。在C#中,你可以...

    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协议版本。 - **请求头部**:包含了多个键值对,用来提供关于请求的附加信息,例如用户代理信息、接受的内容类型等。 - **消息体**:仅出现...

    GET请求https,post请求https

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

    简单实用的PHP并发请求url类

    然而,当需要向多个URL发起请求时,如果一个接一个地处理,可能会导致程序执行效率低下,特别是在处理大量请求时。为了解决这个问题,我们可以使用并发请求技术,将多个URL请求同时发送,从而提高整体的执行速度。...

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

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

Global site tag (gtag.js) - Google Analytics