如何在PHP中将ASCII编码转换为UTF8
答案 0 :(得分:48)
ASCII是UTF-8的子集,因此如果文档是ASCII,则它已经是UTF-8。
答案 1 :(得分:24)
如果您确定当前的编码是纯ASCII,那么您不需要做任何事情,因为ASCII已经是有效的UTF-8。
但是如果你还想转换,只是为了确保它的UTF-8,那么你可以使用iconv
$string = iconv('ASCII', 'UTF-8//IGNORE', $string);
IGNORE将丢弃任何无效字符,以防有些字符无效。
答案 2 :(得分:4)
使用utf8_encode()
可以在此处找到手册页http://php.net/manual/en/function.utf8-encode.php
另请阅读Joel on Software上的这篇文章。如果Unicode是什么以及它是如何工作的,它提供了一个很好的解释。 http://www.joelonsoftware.com/articles/Unicode.html
答案 3 :(得分:3)
“ASCII是UTF-8的子集,所以......” - 所以UTF-8是集? :)
换句话说:任何使用code points
从x00到x7F的字符串构建在ASCII和UTF-8中都无法区分表示(字节序列)。转换这样的字符串是没有意义的。
答案 4 :(得分:3)
使用 mb_convert_encoding 将ASCII转换为UTF-8。更多信息here
$string = "chárêctërs";
print(mb_detect_encoding ($string));
$string = mb_convert_encoding($string, "UTF-8");
print(mb_detect_encoding ($string));
答案 5 :(得分:-1)
使用iconv看起来是最好的解决方案,但我的情况是我有通知形成这个功能:"检测到输入字符串中的非法字符" (没有igonore)。 我使用2个函数来操作ASCII字符串,将其转换为ASCII代码数组,然后序列化:
public static function ToAscii($string) {
$strlen = strlen($string);
$charCode = array();
for ($i = 0; $i < $strlen; $i++) {
$charCode[] = ord(substr($string, $i, 1));
}
$result = json_encode($charCode);
return $result;
}
public static function fromAscii($string) {
$charCode = json_decode($string);
$result = '';
foreach ($charCode as $code) {
$result .= chr($code);
};
return $result;
}