У меня есть следующий код, который пытается кодировать строку UTF-8 в UCS-2LE. Строка представляется действительной, что можно проверить с помощью mb_check_encoding
Однако, когда я бегу iconv
на это я получаю следующее уведомление:
Примечание: iconv (): обнаружен недопустимый символ во входной строке
Есть идеи, в чем проблема?
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
$string = 'Voiture ';
$isValidUTF8 = mb_check_encoding($string, 'UTF-8');
echo 'Is valid UTF-8: ' . ($isValidUTF8 ? 'Yes' : 'No') . "\n";
$text1 = iconv('UTF-8', 'UCS-2LE', $string);
var_dump($text1);
Выход:
Действителен UTF-8: Да
Примечание: iconv (): обнаружен недопустимый символ во входной строке
BOOL (ложь)
Проблема в том, что не является действительным UCS-2LE персонаж. Вы можете попытаться добавить
\TRANSLIT
или же \IGNORE
к выходной кодировке.
Использование TRANSLIT должно заменить несуществующие символы похожими, а IGNORE удаляет их из выходной строки.
Вы можете сделать это так, но это не проверено, и я не уверен, работает ли это с UCS-2LE
$text1 = iconv('UTF-8', 'UCS-2LE\\IGNORE', $string);
// or
$text1 = iconv('UTF-8', 'UCS-2LE\\TRANSLIT', $string);
Если вам нужна поддержка Emoji, подумайте о том, чтобы остаться в кодировке UTF-8.
Других решений пока нет …