关于php:将ASCII转换为UTF-8编码

Convert ASCII TO UTF-8 Encoding

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


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


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

但是,如果您仍要进行转换,只是要确保其UTF-8,则可以使用iconv

1
$string = iconv('ASCII', 'UTF-8//IGNORE', $string);

IGNORE将丢弃所有无效字符,以防万一某些无效字符为ASCII。


使用mb_convert_encoding将ASCII转换为UTF-8。更多信息在这里

1
2
3
4
5
$string ="chárêct?rs";
print(mb_detect_encoding ($string));

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

使用utf8_encode()

手册页可以在这里找到http://php.net/manual/en/function.utf8-encode.php

另请参阅Joel on Software上的这篇文章。如果Unicode是什么以及它如何工作,它提供了很好的解释。 http://www.joelonsoftware.com/articles/Unicode.html


" ASCII是UTF-8的子集,所以..."-那么UTF-8是一个集合? :)

换句话说:任何用code points从x00到x7F构建的字符串在ASCII和UTF-8中都具有难以区分的表示形式(字节序列)。转换这样的字符串是没有意义的。


使用iconv看起来是最好的解决方案,但我的情况是,我注意到此功能:"在输入字符串中检测到非法字符"(无igonore)。
我使用2个函数来处理ASCII字符串,然后将其转换为ASCII代码数组,然后进行序列化:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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;
}