首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UTF-8编码文本的UTF-8编码与原始UTF-8编码文本不同

UTF-8编码文本的UTF-8编码与原始UTF-8编码文本不同
EN

Stack Overflow用户
提问于 2020-12-26 22:18:22
回答 1查看 113关注 0票数 0

这是我在项目中发现错误时想出的一段PHP代码片段。

代码语言:javascript
复制
print(($str == utf8_encode($str) ? "the same text" : "not the same text") . PHP_EOL);
print(mb_detect_encoding($str));

现在,它的作用是告诉我一个字符串$str是否与它的UTF-8编码版本具有相同的编码,然后它输出它的初始编码。

我所期望的是UTF-8文本与原始文本相同,或者原始文本已经是UTF-8,因此UTF-8编码文本与原始文本相同。

但实际发生的是以下输出:

代码语言:javascript
复制
not the same text
UTF-8

只有当我设置了$str = array_keys($_POST)[0];,并且在我的请求主体中使用了一个带有特殊字符的键,比如äöü=test,这样$str才会是äöü (直接在代码中定义它将不会产生相同的输出)时才会出现这种情况。

我从输出中解释了原始字符编码是UTF-8,但这两个字符串并不相同。如果我打印初始字符串,它是空的,编码后的字符串将是äöü。

我不明白当一个字符串用它自己的编码编码时,它会有什么不同。有人能给我解释一下吗?

EN

回答 1

Stack Overflow用户

发布于 2020-12-26 22:37:38

问题是您假设“原始文本已经是UTF-8,因此UTF-8编码的文本与原始文本相同”。

从PHP官方文档关于utf8_encode (https://www.php.net/manual/en/function.utf8-encode.php):

此函数用于将字符串数据从

-8859-1编码转换为UTF-8。

换句话说,这个函数是ISO-8859-1到UTF-8的转换器。如上所述,此函数的正确使用只需要ISO-8859-1字符串。因此,如果您使用另一种编码作为参数,您应该会遇到垃圾。

这个线程(PHP: Convert any string to UTF-8 without knowing the original character set, or at least try)讨论一个“符合UTF-8的任何字符”。

希望对你有帮助

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65457279

复制
相关文章

相似问题

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