将ASCII转换为UTF-8编码

时间:2011-02-13 12:00:25

标签: php utf-8 ascii

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

6 个答案:

答案 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;
}