Google Chrome 中的 URL 编码

8

有人知道Google Chrome用什么编码来编码URL吗?

在我们尝试从Google的搜索框(Omnibox)复制URL时,会进行编码。

我已经粘贴了以下URL:

www.bing.com/search?q=이윤희&go=&qs=n&form=QBLH&filt=all&pq=이윤희&sc=0-0&sp=-1&sk=

在 Google 搜索中输入,然后从搜索框中复制相同的 URL,它就会变成这样:

http://www.bing.com/search?q=%EC%9D%B4%EC%9C%A4%ED%9D%AC&go=&qs=n&form=QBLH&filt=all&pq=%EC%9D%B4%EC%9C%A4%ED%9D%AC&sc=0-0&sp=-1&sk=

我想知道他们使用的编码方式是什么。


urlencode?! 在这里测试它:链接 - machineaddict
php urlencode 函数 - sourabh kasliwal
当然,Google Chrome只编码了特殊字母(이윤희)。 - machineaddict
不是这样的@machineaddict:谷歌编码为“%EC%9D%B4%EC%9C%A4%ED%9D%AC&go=&qs=n&form=QBLH&filt=all&pq=%EC%9D%B4%EC%9C%A4%ED%9D%AC&sc=0-0&sp=-1&sk=”,而urlencod函数则为“%E6%88%91%E6%98%AF%E8%B0%81%26go%3D%26qs%3Dn%26form%3DQBLH%26filt%3Dall%26pq%3D%E6%88%91%E6%98%AF%E8%B0%81%26sc%3D0-1%26sp%3D-1%26sk%3D”,因此它们之间有很大的区别。 - sourabh kasliwal
我不知道怎样更好地解释,可以参考下面deceze的回答。 - machineaddict
1个回答

9
这是标准的百分数URL编码,针对UTF-8编码的文本进行编码。一个URL 不能 包含非ASCII字符(实际上,是不同的子集,针对URL的不同部分)。你实际上不能在URL中包含“이윤희”。要嵌入任意字符,可以将它们百分号编码。这只需取单个字节并将其十六进制值编码为%xx。 "이윤희" 的UTF-8字节表示形式是EC 9D B4 EC 9C A4 ED 9D AC,这正是你在URL中看到的内容。
URL始终是这样的,复制时并非Chrome进行处理。相反,如果URL显示为www.bing.com/search?q=이윤희&...,那么这是Chrome很好地为您解码并显示URL。
请参见每个Web开发人员都必须了解的URL编码知识
在PHP中,可以使用rawurlencode来复制此过程。
echo rawurlencode('이윤희'); // (assuming UTF-8 encoded source code)

谢谢@deceze,我明白了你的意思,但是我该如何只转换URL文本中的文字,也就是“이윤희”转成EC 9D B4 EC 9C A4 ED 9D AC,而不是URL中的其他数据。 - sourabh kasliwal
1
仅编码该部分即可。$url = 'example.com?q=' . rawurlencode('이윤희'); - deceze
谢谢,伙计,你让我的一天变得更美好了... :) - sourabh kasliwal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接