Vel*_*cro 4 php ascii utf-8 character-encoding query-string
在请求URL上,我可以获取查询字符串?dir=Documents%20partag%C3%A9s或?dir=Documents%20partag%E9s.我认为第一个是UTF-8,第二个是ASCII.
真正的字符串是: Documents partagés
所以,我有一个PHP脚本(UTF-8),我想要做的是检测查询字符串是ASCII还是UTF-8,如果是ASCII,则将其转换为UTF-8.
我尝试使用mb_函数,但查询字符串始终检测为ASCII,并将查询字符串的urldecode版本检测为UTF-8.
我怎样才能做到这一点?需要注意的是维基百科有一个类似的功能-它本身的编码%E9来%C3%A9.
E9是十进制的233.它不是有效的ASCII字节(仅限0-127),但它é在ISO-8859-1(Latin1)中.使用时mb_convert_encoding,您可以指定多种编码(例如:UTF-8和ISO-8859-1).
这应该解决它:
mb_convert_encoding($str, 'UTF-8', 'UTF-8,ISO-8859-1');
使用以下脚本:
$str1 = 'Documents%20partag%E9s';
$str2 = 'Documents%20partag%C3%A9s';
var_dump(mb_convert_encoding(urldecode($str1), 'UTF-8', 'UTF-8,ISO-8859-1'));
var_dump(mb_convert_encoding(urldecode($str2), 'UTF-8', 'UTF-8,ISO-8859-1'));
我明白了:
string(19) "Documents partagés"
string(19) "Documents partagés"