当我在 Firefox(地址行)中输入http://www.example.com/?query=Траливали之类的 URL时,它会自动编码为http://www.example.com/?query=%D2%F0 %E0%EB%E8%E2%E0%EB%E8。
但是像http://www.example.com/#ajax_call?query=Траливали这样的URL没有被转换。
其他浏览器如 IE8 根本不转换查询。
问题是:如果查询被编码,如何检测(在 PHP 中)?如何解码?
我试过了:
$str = iconv('cp1251', 'utf-8', urldecode($str) );
$str = utf8_decode(urldecode($str));
$str = (urldecode($str));
来自http://php.net/manual/en/function.urldecode.php的许多功能 没有任何效果。
测试:
$str = $_GET['str'];
d('%D2%F0%E0%EB%E8%E2%E0%EB%E8' == urldecode('%D2%F0%E0%EB%E8%E2%E0%EB%E8'));
d('%D2%F0%E0%EB%E8%E2%E0%EB%E8' == $str);
d('Траливали' == $str);
d(urldecode($str));
d(utf8_decode(urldecode($str)));
!!!d('%D2%F0%E0%EB%E8%E2%E0%EB%E8' == urlencode($str)); !!!
回报:
[假] [假] [假] �������� ???? [真的]
某种解决方案:http ://www.example.com/Траливали/ - 将查询作为 url 部分发送并使用 mod_rewrite 解析。