Строка с символом смайлика является допустимой UTF-8, но iconv не может ее обработать

У меня есть следующий код, который пытается кодировать строку 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 (ложь)

0

Решение

Проблема в том, что �� не является действительным 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.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]