首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检测URL查询字符串编码

检测URL查询字符串编码
EN

Stack Overflow用户
提问于 2011-01-28 02:32:18
回答 1查看 3.2K关注 0票数 4

在请求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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-28 02:58:19

E9是十进制的233。它不是有效的ASCII字节(仅限0-127),但它是ISO-8859-1 (Latin1)中的é。使用mb_convert_encoding时,您可以指定多个编码(例如: UTF-8和ISO-8859-1)。

这应该可以解决这个问题:

代码语言:javascript
复制
mb_convert_encoding($str, 'UTF-8', 'UTF-8,ISO-8859-1');

使用以下脚本:

代码语言:javascript
复制
$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'));

我得到了:

代码语言:javascript
复制
string(19) "Documents partagés"
string(19) "Documents partagés"
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4820329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档