via:http://chinaonrails.com/topic/view/1771.html
URL 编码
URL 编码是一种浏览器用来打包表单输入的格式. 浏览器从表单中获取所有的name和其中的值 ,将他们作为name/value参数编码, 移去那些不能传送的字符, 将数据排行等等,这些还取决于你用GET还是POST?作为URL的一部分或者分离地发给服务器. 不管哪种情况, 在服务器端的表单输入格式样子象这样:
theName=Ichabod+Crane&gender=male&status=missing&headless=yes
URL编码遵循下列规则:
每对name/value由&符分开.
每对来自表单的name/value由=符分开. 如果用户没有输入值给这个name,那么这个name还是出现,只是无值(象这样 "name=").
任何特殊的字符(就是那些不是简单的七位ASCII,如汉字) 将以百分符%用十六进制编码. 当然也包括象 =, &, 和 % 这些特殊的字符.
在输入区中的空格将以加号+显示.
因为表单输入是用这个URL编码传递给你的脚本的,在你用这些参数之前必须解码,因为解码是个很普遍的工作,可以有很多工具做这个工作 . 你没有必要自己写这个解码程序.
URL是用于表示信息位置的标识符号,称为“统一资源定位符”,字串由四部分组成:
协议:计算机之间进行通信所使用的规则;
域名:被访问网站服务器的专用名称;
目录:网页在网站服务器中的位置;
文件名:网页在服务器中的名字。
四部分连接起来就是:
协议://域名/服务器子目录/文件名
2 - 6-23 16:24
robin 北京市海淀区
经过encoding, url里什么字符都可以包含.
对于特殊字符,会先转换成utf-8,然后变成%HH的形式,HH是byte的十六进制值
3 - 6-23 16:26
龙生第九子 北京市朝阳区
1.在没有中文字符的机器可能,无法访问到这一连接。
2.搜索引擎,不会收录url上有中文的地址。
3.中文网址非常不利国际化,很多人期望的是更友好的。
每个人都喜欢有意义的URL,所以使用'/users/jim-neath'比使用'/users/231'或 /users/吉姆 更nice
4 - 6-23 16:27
Caiwangqin 楼主 中国
以下是和刘松的交流记录:
URL的参数编码规范似乎是base64 url safe.
在ruby端,可以
require 'cgi'
CGI.escape(...) 还是encode/decode来着,我忘了.
在javascript端,是encodeURIComponenent
它们接收的,都是key=value&key=value里,编码之前的value
Sent at 4:17 PM on Monday
刘松: http://www.faqs.org/rfcs/rfc3548.html
看Base 64 Encoding with URL and Filename Safe Alphabet那一段.
Sent at 4:20 PM on Monday
刘松: 至少value里不能包含 &和=字符,不然就破坏key=value&key=value这种格式了.
至于中文,我不清楚,可能涉及unicode编码问题,所以还是encode一下再传输更靠谱
rails的xx_path及ajax库的类似Ajax.Request,在内部都对key,value进行encode,所以,在编码上感觉不到.
decode的过程,server side自动做了,所以一般不用我们去显式调用,params[:key]取到的就是已经decode后的值
5 - 6-23 16:33
Caiwangqin 楼主 中国
从理论上讲,经过encoding后,URL中可以包含所有字符。以下是和Robin Lu的交流记录:
Caiwangqin: 没有中文系统支持的系统呢?不encoding呢?如 P1.cn/中国
中国.p1.cn
Robin: 浏览器会自己encoding,你不用管
http://www.caibangzi.com/document/show/什么是基金
Caiwangqin: 这个是可以,为什么自定义用户URL时,过去一般没有人支持中文呢?
Robin: 那是因为一般很少有系统愿意支持中文用户名吧
还有一个原因是安全问题
Caiwangqin: 中文在URL中不安全?
Robin: 因为unicode会造成很多
glyph相同但编码不同的字符
会出现冒充用户的
6 - 6-23 16:43
bd7lx 深圳
越研究越有劲
盼望用户都用opera吧
7 - 6-23 16:48
Caiwangqin 楼主 中国
以下是和 94smart 的交流记录:
94smart: 这个问题太高深了
一般我碰到中文URL的问题都会跳过
Caiwangqin: 跳过?
94smart: 就是能不用就不用
Caiwangqin: 现在我们在决定是否在用户挑选自己的URL时是否支持中文,如 蔡望勤.p1.cn
94smart: 最后会转换为英文URL
这样有什么直接的好处吗?或者说这是用户的直接需求吗?
Caiwangqin: 没有好处,也不是直接需求。我们的产品经理说可以支持
94smart: 。。。
这个是劳民伤财呀
Caiwangqin: 到技术这里,我就要验证是否可行了。
Sent at 4:43 PM on Monday
94smart: 处理逻辑可不可以这样:不管哪种编码,统一转成参数是userid的链接。
Caiwangqin: 不行,要在显示URL的时候象这样:P1.cn/蔡望勤,而不能是 P1.cn/323232
94smart: 那就只能每页都作UTF8转码这个动作了
而且好像不是每个浏览器都支持中文URL
94smart: 保险的做法是让用户自己改IE的Internet选项
关掉“是以 UTF-8 发送URL”这个选项
Caiwangqin: 我们不可能要求用户修改浏览器选项后来使用我们的网站的。
94smart: 所以问题比较大呀
8 - 6-23 16:56
bd7lx 深圳
可以教育用户
2000年左右,浏览器大战的时候
首页经常要求用户,使用某种浏览器,指定编码
9 - 6-23 17:08
Caiwangqin 楼主 中国
Iceskysl: 这个玩意一般用encoding后都可以
另外和机器浏览器发起请求的编码有关
在IE的高级设置里面
可以设置发起请求的编码格式
10 - 6-23 17:11
robin 北京市海淀区
url显示和发送是两回事.
ie我懒得试了,safari是会按照"P1.cn/蔡望勤"来显示的,firefox在2.0以前是按照十六进制码显示,3.0已经fix了这个问题,同样是"P1.cn/蔡望勤".
但是发送的时候,都是encoding后发送的.
url的decoding/encoding是浏览器和cgi的事情,和用户没有关系.
"以 UTF-8 发送URL"是为那些老旧的不能识别utf-8的cgi设置的,和你要解决的不是一个问题.
11 - 6-23 17:24
bd7lx 深圳
还没研究透
P1.cn/蔡望勤
在不同的浏览器里显示是不一样的
中文Windows环境下,IE中默认发送的URL的PATH部分是UTF-8编码,参数部分是GBK编码。
中文Windows环境下FireFox中默认发送的URL的PATH和参数都是GBK编码
很多情况下浏览器的地址栏看到URL并不等同于发送到服务器的URL
想让客户看的清楚, 让客户用safari, opera
任何字符经过encoding 比如utf8 可以接受,但混合了反斜线或撇号
比如
P1.cn\蔡‘望勤/版主<北京>
恐怕server端也处理不好
12 - 6-23 18:00
epaulin 地球
我给公司做的网站用了中文网址( encoding 过的 16 进制字符 ),目前为止还没出现问题。
13 - 6-23 18:55
stainless 地球
url的子目录和域名中非ascii的unicode字符处理不同的
域名方面搜索 IDN
14 - 2-27 14:38
hlxwell 地球
浏览器是会自动转的,
<a href='/index/中文'>test</a>
这个会变成浏览器编码,但是我发现一个严重的问题就像robin lu说的 glyph. 同一个中文变成的 16进制编码 在不同浏览器里,会出现不同的编码结果。
分享到:
相关推荐
JAVA解决URL路径中含有中文的问题。无论是路径中还是文件名包含中文都可以处理。经测试验证通过。
Python 爬虫之超链接 url中含有中文出错及解决办法 python3.5 爬虫错误: UnicodeEncodeError: 'ascii' codec can't encode characters 这个错误是由于超链接中含有中文引起的,超链接默认是用ascii编码的,所以不...
1、URL中如果含有中文等非ASCII字符,则浏览器会对它们进行URLEncode。为了避免浏览器采用了我们不希望的编码,所以最好不要在URL中直接使用非ASCII字符,而采用URL Encode编码过的字符串%. 比如: URL: ...
主要为大家分享了介绍了java中文乱码之解决URL中文乱码问题的方法,感兴趣的小伙伴们可以参考一下
url分类解决URL里面的空格、中文、及其他特殊字符问题
搜集了网上的VBA函数,在excel中通过函数将汉字转为两种类型的URL编码,例如将 天空 二字转化为GB2312的“%CC%EC%BF%D5”或者是UTF-8的 “%E5%A4%A9%E7%A9%BA”。方便用于连接转换。VBA相关函数均来自网上,做了小小...
NULL 博文链接:https://andy-li-chn.iteye.com/blog/1594938
在页面的url中使用encodeURI(encodeURI(中文)),对中文... 您可能感兴趣的文章:js将json格式的对象拼接成复杂的url参数方法js的form表单提交url传参数(包含+等特殊字符)的两种解决方法JS根据key值获取URL中的参数值及
JAVA(Web)中URL链接中文参数乱码,如,java web中的超链接<a></a>标签传中文参数,提交到servlet中后,解决乱码问题!
今天小编就为大家分享一篇python3处理含有中文的url方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
浏览器网址后面带的get参数值含有中文的时候,在php里面获取字符串并且进行urlencode处理的时候,不同的浏览器,urlencode函数转换后的结果不一样。 原来urlencode这个函数有2中编码方式,一种是gbk格式的编码,一种...
Android做网站客户端用到的地址栏中文编码成
在谷歌的算法中,URL包含关键字是会给页面赋予一定权重的,英文是,中文也是,朽木猜测百度之前没有给予中文URL权重,可能是因为识别的问题。 经过一些简单的测试,朽木发现中文URL中包含关键字,对百度SEO有很积极...
这种问题,初学者应该都会遇到,分享给大家做个参考! from urllib.parse import quote ... 您可能感兴趣的文章:Python 爬虫之超链接 url中含有中文出错及解决办法解决python爬虫中有中文的url问题Py
目前大部分的网站,都是使用的UTF-8编码。例如发送一段二进制到服务器时,服务器规定该二进制内容的编码...附件是GB18030包含的21004个汉字的GB18030编码、Unicode编码、URL编码对照表,可用于解决中文乱码转换恢复。
NULL 博文链接:https://forlan.iteye.com/blog/2404071
最近更换了博客空间后,发现许多文章页出现404的情况,找了一下原因,发现是由于URL含有中文而Nginx默认不支持中文URL导致的。此文记录了解决方法。 在Apache中,要实现对中文的支持需要单独加载中文模块,而Nginx...