在请求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。
发布于 2011-01-28 02:58:19
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"https://stackoverflow.com/questions/4820329
复制相似问题