将ASCII转换为UTF-8编码

38

如何在PHP中将ASCII编码转换为UTF8

5个回答

53

ASCII是UTF-8的子集,因此如果文档是ASCII格式,则已经是UTF-8格式。


1
警告:如果ASCII是“扩展的”ASCII,则可能会遇到问题。https://zh.wikipedia.org/wiki/Extended_ASCII - Azeroth2b

32

如果您确定当前的编码纯粹是ASCII,那么您无需进行任何操作,因为ASCII已经是有效的UTF-8编码。

但是如果您仍然想要转换,以确保其为UTF-8编码,那么您可以使用iconv。

$string = iconv('ASCII', 'UTF-8//IGNORE', $string);
< p > IGNORE 会丢弃任何无效字符,以防一些字符不是有效的 ASCII 字符。 < /p >

我一直认为“IGNORE”是自动/隐式错误的。 - tchrist

7

使用mb_convert_encoding将ASCII转换为UTF-8。更多信息请参见此处

$string = "chárêctërs";
print(mb_detect_encoding ($string));

$string = mb_convert_encoding($string, "UTF-8");
print(mb_detect_encoding ($string));

1
只有一个解决方案对我有效,非常感谢! - Acuna
1
这个答案基本上是错的。mb_detect_encoding() 的命名和文档都很不好。它只是通过循环遍历一个系统相关的,通常很短的编码列表(在我的系统中仅有 ASCIIUTF-8),并返回第一个所有字节都有赋值的编码。以可靠的方式编程检测文本编码就像检测一张图片是否有猫一样困难。 - Álvaro González

4

"ASCII是UTF-8的子集,所以..." - 因此UTF-8是一个“集合”? :)

换句话说:任何由x00到x7F的"编码点(code points)"构建的字符串在ASCII和UTF-8中具有不可区分的"表示形式(representations)"(字节序列)。转换这样的字符串是没有意义的。


1
关键短语在于“代码点从x00到x7F”。如果你的“ASCII”具有从x10到xFF的代码点,则需要做更多的工作。 - Azeroth2b

1

11
utf8_encode是用于将Latin-1编码转换为UTF-8的函数,仅适用于Latin-1(也称ISO-8859-1)。 - Dmitri
这个答案是错误的。根据文档,“将 ISO-8859-1 字符串编码为 UTF-8”。ISO-8859-1 不是 ASCII,就像西班牙语不是拉丁语一样。 - Álvaro González

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接