使用从Web浏览器接收的未知编码方法解码字符串

时间:2012-06-05 08:30:58

标签: string character-encoding decode

在web应用程序中我正在处理对像

这样的URL的请求
    http://example.com/<website-base-url>

我正在uft8数据库列和文件系统中记录请求的原始GET参数。对于一些中国域名,我收到了一个带有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的任何建议吗?

1 个答案:

答案 0 :(得分: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似乎是最好的候选者,但即使是那个经过解码的字符串也看起来有点过于重复而不是真正有用的中文。