Преобразование ASCII В UTF-8 кодировкой

Обновить

December 2018

Просмотры

132.3k раз

30

Как преобразовать кодировку ASCII в UTF8 в PHP

6 ответы

20

Если вы уверены, что ваша текущая кодировка чисто ASCII, то вам не нужно ничего делать, потому что ASCII уже действует UTF-8.

Но если вы все еще хотите конвертировать, просто чтобы быть уверенным, что его UTF-8, то вы можете использовать Iconv

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

ИГНОРИРУЙТЕ будет отбрасывать любые недопустимые символы только в случае, если некоторые из них были не действителен ASCII.

47

ASCII является подмножеством UTF-8, поэтому если документ ASCII, то это уже UTF-8.

-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;
}
4

использование utf8_encode()

Человек страница может быть найдена здесь http://php.net/manual/en/function.utf8-encode.php

Также читайте эту статью от Joel на программное обеспечение. Он обеспечивает превосходное объяснение , если что Unicode и как она работает. http://www.joelonsoftware.com/articles/Unicode.html

3

Используйте 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));
3

"ASCII является подмножеством UTF-8, так что ..." - так UTF-8 представляет собой набор ? :)

Другими словами: любая строка строить с code pointsот x00 до x7F имеет неразличимых представления (байт последовательности) в ASCII и UTF-8. Преобразование такой строки не имеет смысла.