Как конвертировать ASCII-кодировку в UTF8 в PHP
ASCII является подмножеством UTF-8, поэтому, если документ является ASCII, то он уже является UTF-8.
Если вы точно знаете, что ваша текущая кодировка является чистой ASCII, вам не нужно ничего делать, потому что ASCII уже является допустимым UTF-8.
Но если вы все еще хотите конвертировать, просто чтобы убедиться, что его UTF-8, вы можете использовать iconv
$string = iconv('ASCII', 'UTF-8//IGNORE', $string);
IGNORE будет отбрасывать любые недопустимые символы только в том случае, если некоторые из них недействительны ASCII.
Использовать 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. Преобразование такой строки бессмысленно.
Используйте 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));
Использование 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; }