Как распознать криво порезанную строку?

Приходят разные данные на код которых я никак не могу повлиять, максимум на лету с win-1251 перекидываю в utf-8.
Эти данные мне нужно сериализовать для чего юзаю json_encode().
Все бы ничего, но некоторые строки utf-8 порезаны криво, подозреваю режут функциями которые не поддерживают многобайтовых кодировок. Как итог у меня не работает нормально json_encode()

Пример:
<?php
$string = 'привет';
var_dump($string); // привет
var_dump(json_encode($string)); // "\u043f\u0440\u0438\u0432\u0435\u0442"

$wrongString = substr($string, 0, 11);
var_dump($wrongString); // "приве�"
var_dump(json_encode($wrongString)); // bool(false)
песочница sandbox.onlinephpfunctions.com/code/a9829c659afcbd...

Как тут лучше сделать? может просто как-то починить json_encode или строку сделать как-то валидной?

заранее спасибо
  • Вопрос задан
  • 200 просмотров
Решения вопроса 1
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
$isValidUTF8 = ! (false === mb_detect_encoding($string, 'UTF-8', true));


Так же если json_encode() вернула false можно посмотреть json_last_error() и сравнить код ошибки с константой JSON_ERROR_UTF8
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
usdglander
@usdglander Куратор тега PHP
Yipee-ki-yay
А что mb_substr использовать религия не позволяет?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы