`
Hooopo
  • 浏览: 335132 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

URL 中包含中文

阅读更多

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路径中含有中文的问题

    JAVA解决URL路径中含有中文的问题。无论是路径中还是文件名包含中文都可以处理。经测试验证通过。

    URL中如果含有中文等非ASCII字符

    ### URL中含有中文等非ASCII字符的相关知识点 #### 一、URL与非ASCII字符的基本概念 在互联网中,统一资源定位符(Uniform Resource Locator,简称URL)是用于标识互联网上资源位置的一种标准格式。URL通常包括...

    URL中包含中文文件名的问题

    标题“URL中包含中文文件名的问题”涉及到的是在互联网中如何处理含有中文字符的文件名。在Web开发中,URL(统一资源定位符)是访问网络资源的主要方式,但URL编码规则并不支持直接包含所有非ASCII字符,尤其是中文...

    Python 爬虫之超链接 url中含有中文出错及解决办法

    Python 爬虫之超链接 url中含有中文出错及解决办法 python3.5 爬虫错误: UnicodeEncodeError: 'ascii' codec can't encode characters 这个错误是由于超链接中含有中文引起的,超链接默认是用ascii编码的,所以不...

    JS实现URL编码转换中文

    在Web开发过程中,经常需要处理URL中的特殊字符,特别是中文字符。由于URL传输限制及浏览器解析原因,中文等非ASCII字符需要被编码为特定格式才能在网络上传输。本文将详细介绍如何使用JavaScript进行URL编码转换,...

    java中文乱码之解决URL中文乱码问题的方法

    在Java开发中,遇到中文乱码问题是一种常见的挑战,特别是在处理URL时。URL中文乱码问题主要是由于URL编码和解码过程中的不一致导致的。下面将详细介绍如何解决这个问题,并探讨几种常用的方法。 首先,我们需要...

    swift-url分类解决URL里面的空格中文及其他特殊字符问题

    在Swift编程中,URL(统一资源定位符)是用于标识互联网上特定资源的字符串,它包含协议、主机名、路径、查询参数等信息。然而,URL中可能存在一些不合法的字符,比如空格、中文字符以及其他特殊字符,这些字符可能...

    URL中文转换

    通过理解编码原理和使用相关Java API,开发者能够确保应用程序正确地处理和显示含有中文的URL,从而提供更友好的用户体验。在实际项目中,要时刻注意编码的兼容性和规范性,以避免可能出现的错误和异常。

    URL中文字符

    除了中文字符外,URL中还可能包含不定参数,这些参数通常是以问号(?)开始,后面跟着键值对,键值对之间用&分隔。例如,`www.example.com/?name=张三&age=25`。这里的"name"和"age"就是参数名,"张三"和"25"是对应...

    汉字转为HTML的URL编码

    搜集了网上的VBA函数,在excel中通过函数将汉字转为两种类型的URL编码,例如将 天空 二字转化为GB2312的“%CC%EC%BF%D5”或者是UTF-8的 “%E5%A4%A9%E7%A9%BA”。方便用于连接转换。VBA相关函数均来自网上,做了小小...

    python3处理含有中文的url方法

    本文将深入探讨如何在Python 3中处理含有中文的URL。 首先,我们需要了解URL编码的基本原理。URL编码是将非ASCII字符转换为%XX形式的过程,其中XX是该字符在UTF-8编码中的两位十六进制表示。Python中提供了`urllib....

    解决url中文乱码.doc

    在Java Web开发中,URL中文乱码问题是一个常见的困扰,主要出现在传递含有中文字符的参数时。本案例中,我们将探讨如何解决这个问题,涉及到的主要知识点包括URL编码、字符集转换以及在Java Servlet、JSP和Struts2...

    jquery获取URL中参数解决中文乱码问题的两种方法

    以上两种方法在处理URL中的参数时,需要注意如果参数值中包含中文字符,那么在发送参数之前需要对其进行URL编码(使用 `encodeURI` 函数),在接收参数之后需要对URL编码的字符串进行解码(使用 `decodeURI` 函数)...

    解决apache对含中文的url网址的支持问题(64位)

    在IT行业中,Web服务器的配置是一项关键任务,尤其是在处理包含非ASCII字符,如中文的URL时。Apache HTTP服务器是世界上最广泛使用的开源Web服务器之一,但默认情况下可能不完全支持中文URL。本文将深入探讨如何解决...

    servlet url传递中文参数

    本篇将详细介绍如何在Servlet中处理URL传递中文参数的情况。 首先,了解URL编码的基本原理。URL编码是将非ASCII字符转换为%xx形式的ASCII序列,其中xx是该字符在UTF-8编码中的前两个十六进制数字。在Java中,可以...

    ASP.NET中url传递中文的解决方案

    ### ASP.NET中URL传递中文的解决方案 在ASP.NET开发过程中,经常会遇到通过URL字符串在不同页面之间传递参数的情况。特别是当这些参数包含中文时,容易出现乱码的问题。这类问题通常源于编码方式不匹配,因此解决...

    URL中汉字乱码问题

    当URL包含非ASCII字符,如汉字时,如果不进行正确处理,就可能出现乱码。 在HTTP协议中,URL是通过ASCII字符集来表示的。由于汉字不在ASCII字符集中,因此在URL中直接使用汉字会导致浏览器无法识别,表现为乱码。...

    jsp中URL传递中文参数的处理方法

    在页面的url中使用encodeURI(encodeURI(中文)),对中文... 您可能感兴趣的文章:js将json格式的对象拼接成复杂的url参数方法js的form表单提交url传参数(包含+等特殊字符)的两种解决方法JS根据key值获取URL中的参数值及

Global site tag (gtag.js) - Google Analytics