url编码标准(URL 如何编码解码为什么要编码)

:暂无数据 2026-07-27 23:40:06 :0

url编码标准(URL 如何编码解码为什么要编码)

各位老铁们,大家好,今天由我来为大家分享url编码标准,以及URL 如何编码解码为什么要编码的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

本文目录

URL 如何编码解码为什么要编码

原因很简单,因为 URL 只能使用 ASCII 字符集来通过因特网进行发送, 不支持中文!!不支持中文!!

在浏览器中的 URL 所展现的样式包含有中文字符,但是当你将这行 URL 复制粘贴时你就会发现,实际上的内容和你所看到的是不一样的。

所以说 URL 编码只是针对非英文字母、阿拉伯数字和某些标点符号起作用的。

URL 编码的原则就是使用安全的字符(没有特殊用途或者特殊意义的可打印字符)去表示那些不安全的字符。

例如说我们有这样一条 URL : www.hahaha.com/你好?a=1&b=2 ,我们如何可以把它合法的在因特网中传播呢??

使用 encodeURIComponent(str) 这个方法来将 utf-8 的字符编码为合法的 URL 。

上面的那条网址合法的传输形式为 window.encodeURIComponent(’www.hahaha.com/你好?a=1&b=2’) 。

想要解码的时候只需要使用 decodeURIComponent(str) 这个方法就可以解码你所得到的
URL 。

同样还是刚才的网址,我们得到解码后的网址为 www.hahaha.com%2F%E4%BD%A0%E5%A5%BD%3Fa%3D1%26b%3D2 ,我们想要得到一个可读性比较高的网址,只需要 decodeURIComponent(’www.hahaha.com%2F%E4%BD%A0%E5%A5%BD%3Fa%3D1%26b%3D2’) 。

如果哪天所有字符都可以在因特网内直接发送的话,可能就不需要在对 URL 进行编码和解码了......

HTML URL 编码


下面是用 URL 编码形式表示的 ASCII 字符(十六进制格式)。
十六进制格式用于在浏览器和插件中显示非标准的字母和字符。
URL 编码 - 从 %00 到 %8f
ASCII Value
URL-encode
ASCII Value
URL-encode
ASCII Value
URL-encode
%000%30`%60%011%31a%61%022%32b%62%033%33c%63%044%34d%64%055%35e%65%066%36f%66%077%37g%67backspace%088%38h%68tab%099%39i%69linefeed%0a:%3aj%6a%0b;%3bk%6b%0c%3cl%6cc return%0d=%3dm%6d%0e%3en%6e%0f?%3fo%6f%10@%40p%70%11A%41q%71%12B%42r%72%13C%43s%73%14D%44t%74%15E%45u%75%16F%46v%76%17G%47w%77%18H%48x%78%19I%49y%79%1aJ%4az%7a%1bK%4b{%7b%1cL%4c|%7c%1dM%4d}%7d%1eN%4e~%7e%1fO%4f%7fspace%20P%50

我来教你如何将URL进行编码和解码

URL编码解码,又叫百分号编码,是统一资源定位(URL)编码方式。URL地址(常说网址)规定了常用地数字,字母可以直接使用,另外一批作为特殊用户字符也可以直接用(/,:@等),剩下的其它所有字符必须通过%xx编码处理。 现在已经成为一种规范了,基本所有程序语言都有这种编码,如js:有encodeURI、encodeURIComponent,PHP有 urlencode、urldecode等。编码方法很简单,在该字节ascii码的的16进制字符前面加%. 如 空格字符,ascii码是32,对应16进制是’20’,那么urlencode编码结果是:%20

1 为什么要URL编码

在因特网上传送URL,只能采用ASCII字符集,也就是说URL只能使用英文字母、阿拉伯数字和某些标点符号,不能使用其他文字和符号,即只有字母和数字、以及某些保留字(空格转换为+),才可以不经过编码直接用于URL。这意味着如果URL中有汉字,就必须编码后使用。 但是麻烦的是 标准的国际组织并没有规定具体的编码方法,而是交给应用程序(浏览器)自己决定。 这导致"URL编码"成为了一个混乱的领域。

2 如何URL编码解码

***隐藏网址***

***隐藏网址***

如何对 HTTP 请求中的字符编码进行正确的处理

1. 什么是URL编码。
URL编码是一种浏览器用来打包表单输入的格式,浏览器从表单中获取所有的name和其对应的value,将他们以name/value编码方式作为URL的一部分或者分离的发送到服务器上。
2. URL编码规则。
每对name/value由&分开,每对来自表单的name/value用=分开。如果用户没有输入值的那个name依旧会出现不过就是没有值。
URL编码是在字符ASCII码的十六进制数的前面加上%。例如\(她的十六进制数表示为5c)的URL编码就是%5c。
***隐藏网址***
其实做web开发乱码问题是经常出现的,有了上面编码的基础之后下面来看看乱码。
1) 乱码问题是web开发过程中经常遇到的问题,主要原因就是URL中使用了非ASCII码造成服务器后台程序解析出现乱码的问题。
2) URL中最容易出现中文的地方就是在QueryString的参数值还有Servletpath中。
***隐藏网址***
第一步:浏览器把URL经过编码送给服务器;
第二步:服务器把这些请求解码处理完毕之后将显示的内容进行编码发送给客户端浏览器;
第三步:浏览器按照指定的编码显示网页
4) 详细剖析GET提交如何编码以及服务器如何解码以及乱码解决方案
对于GET方式,我们知道它的提交是将请求数据附加到URL后面作为参数,这样依赖乱码就会很容易出现,因为数据name和value很有可能就是传递的为非ASCII码。
当URL拼接后,浏览器对其进行encode,然后发送到服务器。具体规则见URL编码规则。
这里详细说一下encode的过程中容易出现的问题,在这个过程中我们要明白需要URL encode的字符一般都是非ASCII码字符,所以我们就能知道出现乱码主要是URL中附加了中文或特殊字符做成的,另一个要知道URL encode到底是以什么样的编码方式对字符进行编码的,其实这个编码方式是由浏览器决定的,不同的浏览器和同一浏览器的不同设置影响了URL的编码,所以为了避免我们不需要的编码,我们可以通过java代码或javaspcript代码统一进行控制。
完成了URL encode之后URL就成了ASCII范围内的字符了,然后就以iso-8859-1的编码方式转换为二进制随着请求头一起发送出去。
到了服务器之后,首先服务器会先用iso-8859-1进行解码,服务器获取的数据都是ASCII范围内的请求头字符,其中请求URL里面带有参数数据,如果是中卫或特殊字符,那么encode后的%XY(编码规则中的十六进制数)通过request.setCharacterEncoding()是不管用的。这时候我们就能发现出现乱码的根本原因就是客户端一般是通过用UTF-8或GBK等对数据进行encode的,到了服务器却用iso-8859-1方式decoder显然不行。
这里的解决方式有两种,
一种:是通过String类的getBytes方法进行编码转换,具体java代码是:
new String(request.getParameter(“name”).getBytes(“iso-8859-1”),“客户端编码方式”)
第二种:在服务器xml代码中改配置信息:
《Connector port="8080"protocol="HTTP/1.1" maxThreads="150" connectionTimeout="20000"
redirectPort="8443"URIEncoding="客户端编码"/》
5) 详细剖析POST提交如何编码以及服务器如何解码以及乱码解决方案
对于POST方式,表单中的参数值对是通过request包发送给服务器,此时浏览器会根据网页的ContentType("text/html; charset=GBK")中指定的编码进行对表单中的数据进行编码,然后发给服务器。
在服务器端的程序中我们可以通过
Request.setCharacterEncoding()设置编码,然后通过
request.getParameter获得正确的数据。
这里出现乱码可以通过Request.setCharacterEncoding()直接解决。

url如何编码解码为什么要编码

一般来说,URL只能使用英文字母、阿拉伯数字和某些标点符号,不能使用其他文字和符号,这是因为网络标准 RFC 1738 做了硬性规定。如果URL中有汉字,就必须编码后使用。但是麻烦的是,RFC 1738没有规定具体的编码方法,而是交给应用程序(浏览器)自己决定,这导致"URL编码"成为了一个混乱的领域。
四种导致混乱的情况:
网址路径中包含汉字
查询字符串包含汉字
Get方法生成的URL包含汉字
Ajax调用的URL包含汉字(在Ajax调用中,IE总是采用GB2312编码(操作系统的默认编码),而Firefox总是采用utf-8编码。)
综上所述,这个时候需要一种编码方法向服务器发送请求,而js则可以满足这一需求。

decodeURI()
decodeURIComponent()
encodeURI()
encodeURIComponent() (一般使用encodeURI()和encodeURIComponent())

encodeURI()是Javascript中真正用来对URL编码的函数。它着眼于对整个URL进行编码,因此除了常见的符号以外,对其他一些在网址中有特殊含义的符号"; / ? : @ & = + $ , #",也不进行编码。编码后,它输出符号的utf-8形式,并且在每个字节前加上%。

它对应的解码函数是decodeURI()

与encodeURI()的区别是,它用于对URL的组成部分进行个别编码,而不用于对整个URL进行编码。因此,"; / ? : @ & = + $ , #",这些在encodeURI()中不被编码的符号,在encodeURIComponent()中统统会被编码。至于具体的编码方法,两者是一样。

它对应的解码函数是decodeURIComponent()。

encodeURIComponent比encodeURI编码的范围更大。
***隐藏网址***
如果你需要编码整个URL,然后需要使用这个URL,那么用encodeURI,否则使用encodeURIComponent。

URL的井号及编码

一、#的涵义

代表网页中的一个位置。其右面的字符,就是该位置的标识符。比如,

就代表网页index.html的print位置。浏览器读取这个URL后,会自动将print位置滚动至可视区域。

为网页位置指定标识符,有两个方法。一是使用锚点,比如《a name="print"》《/a》,二是使用id属性,比如《div id="print" 》。

二、HTTP请求不包括#

是用来指导浏览器动作的,对服务器端完全无用。所以,HTTP请求中不包括#。

比如,访问下面的网址,

浏览器实际发出的请求是这样的:

可以看到,只是请求index.html,根本没有"#print"的部分。

三、#后的字符

在第一个#后面出现的任何字符,都会被浏览器解读为位置标识符。这意味着,这些字符都不会被发送到服务器端。

比如,下面URL的原意是指定一个颜色值:

但是,浏览器实际发出的请求是:

可以看到,"#fff"被省略了。只有将#转码为%23,浏览器才会将其作为实义字符处理。也就是说,上面的网址应该被写成:

四、改变#不触发网页重载

单单改变#后的部分,浏览器只会滚动到相应位置,不会重新加载网页。

比如,从

改成

浏览器不会重新向服务器请求index.html。

五、改变#会改变浏览器的访问历史

每一次改变#后的部分,都会在浏览器的访问历史中增加一个记录,使用"后退"按钮,就可以回到上一个位置。

这对于ajax应用程序特别有用,可以用不同的#值,表示不同的访问状态,然后向用户给出可以访问某个状态的链接。

值得注意的是,上述规则对IE 6和IE 7不成立,它们不会因为#的改变而增加历史记录。

六、window.location.hash读取#值

window.location.hash这个属性可读可写。读取时,可以用来判断网页状态是否改变;写入时,则会在不重载网页的前提下,创造一条访问历史记录。

七、onhashchange事件

这是一个HTML 5新增的事件,当#值发生变化时,就会触发这个事件。IE8+、Firefox 3.6+、Chrome 5+、Safari 4.0+支持该事件。

它的使用方法有三种:

对于不支持onhashchange的浏览器,可以用setInterval监控location.hash的变化。

八、Google抓取#的机制

默认情况下,Google的网络蜘蛛忽视URL的#部分。

但是,Google还 规定 ,如果你希望Ajax生成的内容被浏览引擎读取,那么URL中可以使用"#!",Google会自动将其后面的内容转成查询字符串 escaped_fragment 的值。

比如,Google发现新版twitter的URL如下:

就会自动抓取另一个URL:

通过这种机制,Google就可以索引动态的Ajax内容。


参考资料,详细

浏览器url传的中文是什么编码格式

  • ISO-8859-1

  • 在项目中碰到了ajax传来的参数,后台接收值乱码(如下图)的问题 在此记录一下
    前台:
    后台:
    解决问题
    为什么需要编码
    怎样编码
    实际出现的问题解决方法
    1.为什么需要编码?
    URL 只能使用 ASCII 字符集来通过因特网进行发送。
    也就是说URL只能使用英文字母、阿拉伯数字和某些标点符号,不能使用其他文字和符号
    这意味着 如果URL中有汉字,就必须编码后使用。
    但是麻烦的是 标准的国际组织并没有规定具体的编码方法,而是交给应用程序(浏览器)自己决定。
    这导致"URL编码"成为了一个混乱的领域。
    1.1 浏览器对于中文的编码
    Chrome浏览器和火狐的浏览器是一样的如下图,"文"和"章"的utf-8编码分别是"E6 96 87"和"E7 AB A0" ,
    下图所示的"%e6%96%87%e7%ab%a0"就是按照顺序,在每个字节前加上%而得到的
    Edge浏览器和IE浏览器是一样的,如下图 这个的编码方式我没看出来,希望高手指点
    1.2 需要编码的原因还有几点:
    你有没有想过,Ukey=value这种传参方式式中, Value中包含 ? 或者 = 怎么办呢
    你有没有想过,不同的操作系统、浏览器、不同的网页字符集(charset)会对你的传值造成影响呢
    如果你都考虑过,毫无疑问你早就知道需要编码的原因了
    2.怎样编码?
    Url编码通常也被称为百分号编码(percent-encoding),是因为它的编码方式非常简单,
    使用%百分号加上两位的字符——0123456789ABCDEF——代表一个字节的十六进制形式
    对于ASCII字符,字母a 在ASCII码中对应的字节是0x61,那么Url编码之后得到的就是%61,
    字母abc, url编码后得到的就是%61%62%63
    对于非ASCII字符,RFC文档建议使用utf-8对其进行编码得到相应的字节,然后对每个字节执行百分号编码。
    如"中文"使用UTF-8字符集得到的字节为0xE4 0xB8 0xAD 0xE6 0x96 0x87,经过Url编码之后得到"%E4%B8%AD%E6%96%87"。
    使用Javascript先对URL编码,然后再向服务器提交,不要给浏览器插手的机会
    这样就能保证客户端只用一种编码方法向服务器发出请求
    3.实际出现的问题解决方法
    首先说一下js的三种编码函数,escape、encodeURI和encodeURIComponent
    3.1.escape函数:
    js中编码出生最早的一个,不提倡使用,原因是它不符合我上边(【怎样】)说的url编码原则
    真正作用是:
    返回一个字符的Unicode编码值,为的是方便他们能在所有计算机上可读
    具体规则是:
    所有空格、标点以及其他非ASCII字符都用%xx编码替换; 例如空格返回的是%20 字符值大于255的字符以%uxxxx格式储存
    所以以后如果看到%u的编码,那就是escape函数
    看下边这个列子 你就很清楚的知道它的具体转换规则了
    项目中使用:
    前台:
    ***隐藏网址***
    后台:
    QueryString 这个函数会自动解码,所以不需要写什么解码的语句。
    还有一点需要注意的是:
    escape()不对"+"编码。但是我们知道,网页在提交表单的时候,如果有空格,则会被转化为+字符。服务器处理数据的时候,会把+号处理成空格。所以,使用的时候要小心。
    3.2.encodeURI函数
    这个函数才是javascript中真正用来对URL编码的函数
    规则就是我上面第二部分所说的,采用utf-8编码。
    前台:
    后台:
    用这个方法会存在乱码的问题,看到很多人问这问题的时候,回答者都是让采用escape这种方法,难道这样问题就解决了吗?
    如果我想用 Jquery的serialize()方法 来获取表单值并且序列化(标准URL编码)传到后台就不方便用escape啦
    解决乱码问题:
    出现乱码的原因是我的web config文件里有这样的配置:
    《globalization requestEncoding="gb2312" responseEncoding="gb2312" /》
    解决方案1:去掉这个设置或者改成utf-8的(这个方案的利害不用说,尤其是在项目已经快完成的时候)
    解决方案2:利用ajax的post方法,或者用Get方法,但必须作为方法的Data参数,这样在后台接收到的数据不会被编码
    前台:
    ***隐藏网址***
    })
    后台:需要手动解码一次
    string ad =HttpUtility.UrlDecode(context.Request);
    HttpUtility.UrlDecode和Server.UrlDecode不同的是,HttpUtility.UrlDecode是有重载的,可以指定编码的方式
    例如:
    string adsx = HttpUtility.UrlDecode(context.Request.QueryString,System.Text.Encoding.UTF8);
    解决方案3:获取已编码的原始数据,自己进行解码
    通过观察Request的对象,可以发现context.Request.Url.Query是未解码的数据,这就太棒了
    代码:
    string address= HttpUtility.ParseQueryString(context.Request.Url.Query, Encoding.UTF8);
    解决方案4(探讨):先将QueryString解码的数据按照他原来的方式进行编码,然后再用utf8进行解码,这个方法有点问题,最后一个字符会出现乱码,还没找到原因..
    在将数据编码的时候,就不是原来的浏览器发送的编码值了,正确的是最后边应该是%9C,但现在却是%3f
    3.3.encodeURIComponent函数
    与encodeURI()的区别是,它用于对URL的组成部分进行个别编码,而不用于对整个URL进行编码。
    因此,"; / ? : @ & = + $ , #",这些在encodeURI()中不被编码的符号,在encodeURIComponent()中统统会被编码
    具体的编码规则是和encodeURI函数是一样的,如下,encodeURI不会编码 ? 和 @ ,而encodeURIComponent会
    encodeURIComponent这个函数就和他的名字一样,是对URI中的一个组件进行编码,不能用于全部的URI

python中quote函数是什么意思,怎么用

屏蔽特殊的字符、比如如果url里面的空格!url里面是不允许出现空格的。

在 Python2.x 中的用法是:
urllib.quote(text)
Python3.x 中是
urllib.parse.quote(text)
按照标准, URL 只允许一部分 ASCII 字符(数字字母和部分符号),其他的字符(如汉字)是不符合 URL 标准的。
所以 URL 中使用其他字符就需要进行 URL 编码。
URL 中传参数的部分(query String),格式是:
name1=value1&name2=value2&name3=value3
假如你的 name 或者 value 值中有『&』或者『=』等符号,就当然会有问题。所以URL中的参数字符串也需要把『&=』等符号进行编码。
URL编码的方式是把需要编码的字符转化为 %xx 的形式。通常 URL 编码是基于 UTF-8 的(当然这和浏览器平台有关)。
例子:
比如『我』,unicode 为 0x6211, UTF-8 编码为 0xE6 0x88 0x91,URL 编码就是
%E6%88%91
在 JavaScript 中,提供了 encodeURI 和 encodeURIComponent 两种方法对 URL 进行编码;
Python 的 urllib 库中提供了 quote 和 quote_plus 两种方法。
因为是针对不同场景设计,以上四种方法编码的范围均不相同,比如 quote 除了 -._/09AZaz ,都会进行编码。quote_plus 比 quote 『更进』一些,它还会编码 /

URL中,什么字符需要编码

关于URL编码,RFC1738做了如下的规定:

“Only alphanumerics , the special characters “$-_.+!*’(),”
, and reserved characters used for their
reserved purposes may be used unencoded within a URL.”

RFC继而说明了保留字、特殊符号、不安全字符的含义——也就是说,下面三类字符可以不经过编码,直接出现在URL上:

  • 特殊字符:$-_.+!*’(),

  • 保留字符:&/:;=?@

  • 为了让我们思路更清晰,我们再总结一下,哪些字符必须要编码:

  • ASCII表中没有对应可显示字符的,例如汉字

  • 不安全字符,包括:#”%《》{}|\^`~

  • 不当做保留字符来使用的保留字符,即&/:;=?@

以上就是我们为大家找到的有关“url编码标准(URL 如何编码解码为什么要编码)”的所有内容了,希望可以帮助到你。如果对我们网站的其他内容感兴趣请持续关注本站。

url编码标准(URL 如何编码解码为什么要编码)

本文编辑:admin

更多文章:


怎么做网站网页归档(网页应该怎么做网页设计有哪些要求)

怎么做网站网页归档(网页应该怎么做网页设计有哪些要求)

大家好,怎么做网站网页归档相信很多的网友都不是很明白,包括网页应该怎么做网页设计有哪些要求也是一样,不过没有关系,接下来就来为大家分享关于怎么做网站网页归档和网页应该怎么做网页设计有哪些要求的一些知识点,大家可以关注收藏,免得下次来找不到哦

2026年10月11日 05:30

跷二郎腿太低好吗?想要通过贴墙站改正二郎腿影响的话,有哪些要点需要注意

跷二郎腿太低好吗?想要通过贴墙站改正二郎腿影响的话,有哪些要点需要注意

本篇文章给大家谈谈二郎腿贴地,以及跷二郎腿太低好吗对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

2026年10月11日 05:10

易语言点击js按钮(易语言网页填表怎样点击链接为“javascript:void(0)“的按钮)

易语言点击js按钮(易语言网页填表怎样点击链接为“javascript:void(0)“的按钮)

本篇文章给大家谈谈易语言点击js按钮,以及易语言网页填表怎样点击链接为“javascript:void(0)“的按钮对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要

2026年10月11日 03:00

regards(Regards,什么意思)

regards(Regards,什么意思)

其实regards的问题并不复杂,但是又很多的朋友都不太了解Regards,什么意思,因此呢,今天小编就来为大家分享regards的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

2026年10月11日 01:10

dom4j文档(如何去掉用dom4j生成的XML文档中的)

dom4j文档(如何去掉用dom4j生成的XML文档中的)

其实dom4j文档的问题并不复杂,但是又很多的朋友都不太了解如何去掉用dom4j生成的XML文档中的,因此呢,今天小编就来为大家分享dom4j文档的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

2026年10月11日 01:00

compare with造句(用compared with和compared to造句)

compare with造句(用compared with和compared to造句)

“compare with造句”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看compare with造句(用compared with和compared to造句)!

2026年10月10日 23:30

xshell软件(Xshell怎么更改字体大小)

xshell软件(Xshell怎么更改字体大小)

各位老铁们好,相信很多人对xshell软件都不是特别的了解,因此呢,今天就来为大家分享下关于xshell软件以及Xshell怎么更改字体大小的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

2026年10月10日 22:50

tensorflow与keras对应版本(为什么tensorflow2.8没有keras)

tensorflow与keras对应版本(为什么tensorflow2.8没有keras)

各位老铁们好,相信很多人对tensorflow与keras对应版本都不是特别的了解,因此呢,今天就来为大家分享下关于tensorflow与keras对应版本以及为什么tensorflow2.8没有keras的问题知识,还望可以帮助大家,解决

2026年10月10日 22:10

个人网站首页界面(深圳社会保险服务个人网页主页)

个人网站首页界面(深圳社会保险服务个人网页主页)

“个人网站首页界面”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看个人网站首页界面(深圳社会保险服务个人网页主页)!

2026年10月10日 22:00

maven仓库jar网站(如何在maven仓库中添加jar包)

maven仓库jar网站(如何在maven仓库中添加jar包)

这篇文章给大家聊聊关于maven仓库jar网站,以及如何在maven仓库中添加jar包对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

2026年10月10日 19:50

最近更新

oppo r813t卡刷包(oppo r813s可以刷r813t刷机包)
2026-10-11 10:00:25 浏览:0
热门文章

by网站域名444(444ppp现在是什么域名)
2026-08-19 20:20:31 浏览:13
韩国大片视频mv(韩国20个感人mv)
2026-07-11 13:10:02 浏览:12
标签列表