特定中文urlencode的问题

wjjchen 2018-01-11 01:53:13
今天遇到一个问题。gbk编码的字“扙",urlencode后对应的是%92E,但是再用decode后却不能还原为“扙”,一个中文字符在urlencode后不都是两个%xx%xx吗?这里怎么是一个%xxx。对应的用java测试后encode结果是“%92%45”
...全文
779 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2018-01-11
  • 打赏
  • 举报
回复
那是 java 认为 RFC 1738 标准太老了,自己随心所欲了 应对这种情况你可以写个自己的url编码函数 f
unction myurlencode($str) {
  return '%' . join('%', array_map('dechex', pack('C*', $str));
}
wjjchen 2018-01-11
  • 打赏
  • 举报
回复
引用 3 楼 xuzuning 的回复:
$s = '扙';
echo $t = urlencode($s);//%92E
echo urldecode($t);//扙
编码解码都未有问题 E 的十六进制内码是 45, 而 扙 的第二字节十六进制内码也是 45。 所以 E 和 %45 是等效的,如果是你自己在写 url 解码程序,那么就要注意到这个事实
目前我是用java的URLDecoder.decode("xxxxx","GBK");去反解,这样解出来的就是乱码。
xuzuning 2018-01-11
  • 打赏
  • 举报
回复
$s = '扙';
echo $t = urlencode($s);//%92E
echo urldecode($t);//扙
编码解码都未有问题 E 的十六进制内码是 45, 而 扙 的第二字节十六进制内码也是 45。 所以 E 和 %45 是等效的,如果是你自己在写 url 解码程序,那么就要注意到这个事实
wjjchen 2018-01-11
  • 打赏
  • 举报
回复
是gbk编码吗?
qq_34139573 2018-01-11
  • 打赏
  • 举报
回复
我这里测试是正常的,解码用urldecode

21,882

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧