0

在 web 应用程序中,我正在处理对 url 的请求,例如

    http://example.com/<website-base-url>

我正在将请求的原始 GET 参数记录在 uft8 数据库列和文件系统中。对于一些中文域,我收到带有 website-base-url 参数的请求,例如

    %C3%83%C2%A3%C3%82%C2%A5%C3%83%C2%A2%C3%82%C2%A4%C3%83%C2%A2%C3%82%C2%A7%C3%83%C2%A3%C3%82%C2%A5%C3%83%C2%A2%C3%82%C2%A4%C3%83%C2%A2%C3%82%C2%B4%C3%83%C2%A3%C3%82%C2%A8%C3%83%C2%A2%C3%82%C2%B4%C3%83%C2%A2%C3%82%C2%B4.cn 

使用 urldecode 解码返回

    ã¥â¤â§ã¥â¤â´ã¨â´â´.cn

这似乎不是用户想要请求的域名。

我尝试了 urlencoding、base64、utf8 和组合,但都没有成功。

有什么建议如何将给定参数解码为 utf8?

4

1 回答 1

1

URL 百分比编码只是对原始字节进行编码。它不会为您提供有关文本实际编码的任何提示。如果你不知道这些字节代表什么编码,你所能做的就是猜测。

php > $d = urldecode('%C3%83%C2%A3%C3%82%C2%A5%C3%83%C2%A2%C3%82%C2%A4%C3%83%C2%A2%C3%82%C2%A7%C3%83%C2%A3%C3%82%C2%A5%C3%83%C2%A2%C3%82%C2%A4%C3%83%C2%A2%C3%82%C2%B4%C3%83%C2%A3%C3%82%C2%A8%C3%83%C2%A2%C3%82%C2%B4%C3%83%C2%A2%C3%82%C2%B4.cn');

php > echo $d;
ã¥â¤â§ã¥â¤â´ã¨â´â´.cn

php > echo iconv('BIG5', 'UTF-8', $d);

php > echo iconv('Shift-JIS', 'UTF-8', $d);
テδ」テつ・テδ「テつ、テδ「テつァテδ」テつ・テδ「テつ、テδ「テつエテδ」テつィテδ「テつエテδ「テつエ.cn

php > echo iconv('GB18030', 'UTF-8', $d);
脙拢脗楼脙垄脗陇脙垄脗搂脙拢脗楼脙垄脗陇脙垄脗麓脙拢脗篓脙垄脗麓脙垄脗麓.cn

GB18030 似乎是最好的候选者,但即使是解码后的字符串看起来也有点重复,不能成为真正有用的中文。

于 2012-06-05T08:45:04.253 回答