AlexanderShapoval
@AlexanderShapoval
PHP maker

Как определить кодироку строки в PHP?

Всё перегуглил, ничего не нашел. Весь сайт работает на utf-8 (Laravel). Проблемы начинаются когда я опрашиваю сервера и получаю от них информацию в формате "CP866" (спасибо студии Артема Лебедева за помощь в определении кодировки) и пытаюсь вставить это в MySQL, где также установлено utf-8. Такое случается примерно 1 раз из 1000 запросов. После попытки вставить такую строку - появляется критическая ошибка и скрипт прекращает своё выполнение.

Вот ошибка:
SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\xD0' for column


В общем нужно всеми правдами не правдами определить эту кодировку. Учитывая то что их может быть две. Рандом естественно не катит, и функция mb_detect_encoding всегда возвращает utf-8
  • Вопрос задан
  • 137 просмотров
Решения вопроса 1
AlexanderShapoval
@AlexanderShapoval Автор вопроса
PHP maker
Немного гавнокода). Подходит только для моего случая, когда возможны только две кодировки

<?php

$str = "╨С╨░╤В╤М╨║╨░ ╨Ф╨╕╨│╨╗╨╛╨▓";

$ret = iconv("UTF-8", "CP866", $str);

echo var_dump(strlen($str));
echo var_dump(strlen($ret));

if (strlen($ret) < strlen($str)/2) {
	echo "New " . $ret;
} else {
	echo "Old " . $str;
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

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

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