urldencode 函数怎么解码 urlencode 编码的 GB2312 字符集的文本。

2019-04-27 20:21:03 +08:00
 nfa5
文本先转换为 gb2312 的字符集后,再用 urlencode 编码。编码后的值用 urldecode 解码返回为 null 十分蛋疼。
utf-8 文本编码后的可以直接解码,但 gbk 的解不了。

搜遍互联网也没发现有人遇到同样的问题。。。。
5308 次点击
所在节点    PHP
17 条回复
WordTian
2019-04-27 20:40:14 +08:00
urldecode 一般只针对 ascii 码表的 0 - 127 做转换吧
gbk 的编码就不在这个范围内,怎么解?
nfa5
2019-04-27 20:54:51 +08:00
@WordTian 参考下这个:

URLEncode:是指针对网页 url 中的中文字符的一种编码转化方式,最常见的就是 Baidu、Google 等搜索引擎中输入中文查询时候,生成经过 Encode 过的网页 URL。
URLEncode 的方式一般有两种,一种是传统的基于 GB2312 的 Encode ( Baidu、Yisou 等使用),另一种是基于 UTF-8 的 Encode ( Google、Yahoo 等使用)。

URLdecode:就是将 url 编码后的字符串还原成未编码的样子。


本工具分别实现两种方式的 Encode 与 Decode:

中文 -> GB2312 的 Encode -> %D6%D0%CE%C4

中文 -> UTF-8 的 Encode -> %E4%B8%AD%E6%96%87




既然能对不同编码的字符 encode 为不同的结果,为啥只能对 utf-8 的结果进行解码,gbk 的怎么办?怎么解回来。
nfa5
2019-04-27 20:56:48 +08:00
而且我看到别人的在线工具可以实现 gbk 的解码。参考: http://tool.what21.com/url.html
chinvo
2019-04-27 20:57:50 +08:00
@nfa5 #2 帮你搜索了一下,没发现有内置函数支持

不过可以把 %xx 两两一组,十六进制按 GBK 码转换回汉字

这个估计要自己实现,或者找找有没有第三方的包
7sDream
2019-04-27 21:12:26 +08:00
https://docs.python.org/3/library/urllib.parse.html#urllib.parse.unquote

python 的 unquote 支持 encoding 参数。

PHP 的话,如果自带函数不支持,估计要自己实现了。
WordTian
2019-04-27 21:24:50 +08:00
@nfa5 突然想起来,在使用 URLEncode、URLdecode 的时候,一般是可以指定字符集的
比如 java 的 URLDecoder.decode(String, "UTF-8"),但是通常来说都默认用的 utf-8,用 gbk2312 的很少
估计你用的那个解码工具也是默认指定的 UTF-8
你自己写一个或者找一个字符集是 gbk2312 的解码工具就好了
Northxw
2019-04-27 21:48:00 +08:00
纯真的我进来后发现是 PHP, 但是不能空手来啊,那我就水一波经验吧...
nfroot
2019-04-27 22:21:21 +08:00
@Northxw 这个站发帖才可能涨积分,回帖全是扣积分的
Northxw
2019-04-27 22:44:10 +08:00
@nfroot 呸,你揍开,能不能让我骗骗自己,良心嘞
ysc3839
2019-04-27 22:59:11 +08:00
https://www.php.net/manual/en/function.urldecode.php
翻了一下 PHP 的 manual,并没有说会返回 null。所以这是 PHP 的 bug ?或者是文档有错误?
nfa5
2019-04-27 23:04:51 +08:00
@chinvo 是的呢,找不到现成的函数,网上也没别人写的相关函数或类参考,看来还是得自己造了
nfa5
2019-04-27 23:05:32 +08:00
@WordTian 客户要实现这个也是没办法
nfa5
2019-04-27 23:08:03 +08:00
@ysc3839 不知道呢,php 低版本就是返回 null 换高版本的就直接报这行错误。
ysc3839
2019-04-27 23:54:43 +08:00
@nfa5 哪行错误?
master
2019-04-28 02:07:12 +08:00
owt5008137
2019-04-28 08:44:14 +08:00
解完当做二进制 buffer,再 decode 一下不就好了么
nfa5
2019-04-28 14:59:36 +08:00
@master 这个可以,感谢。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/559271

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX