Функция json_encode
требует действительной строки UTF-8. У меня есть строка, которая может быть в другой кодировке. Мне нужно игнорировать или заменять все недопустимые символы, чтобы иметь возможность конвертировать в JSON.Sanitize UTF-8 в PHP
- Это должно быть нечто очень простое и надежное.
- Ошибка в модуле для ручной проверки, поэтому mojibake в порядке.
- Код, ответственный за исправление кодировки, находится в другом модуле. (Он был сломан, подумал.) Я не хочу дублировать ответственность.
Шестнадцатиричный примера недостоверной строки: 496e76616c6964206d61726b2096
Мое текущее решение:
$raw_str = hex2bin('496e76616c6964206d61726b2096');
$sane_str = @\iconv('UTF-8', 'UTF-8//IGNORE', $raw_str);
Три проблемы с моим кодом:
iconv
выглядит немного слишком тяжелым.- Многим программистам не нравится
@
. iconv
может игнорировать слишком много: целая строка.
Любая идея?
Существует аналогичный вопрос, но меня не интересует конверсия. Ensuring valid utf-8 in PHP
Если вы не заботитесь о преобразовании ... что вы пытаетесь сделать тогда? –
Мне нужна действительная строка UTF-8 для json_encode. Действительный моджибак в порядке. Это все. – Michas
Честно говоря, ваше решение является самым чистым, которого я вижу. Если вы не хотите использовать '@', вы можете запустить строку с помощью проверки кодировки, что является неприятным. –