Задать вопрос
AN_ANT
@AN_ANT

Как победить беду с кодировкой при записи в базу?

Ситуация такая: произвожу транслитерацию строк, типа:
ru--blokcheijn
ru--statistika
..
Ключом для транслитерации является приставка ru--, по которой эта стенопись передается функции на перевод.
При прогоне через отладчик на выходе у функции получается:
- блокчейн
- статистика

Все ок!

Но как только запускаю скрипт в рабочем режиме, в базе данных появляется это:
- блокцхеиjн
- статистика
- фотографийа

Т.е. буквы Я, Й, и некоторые другие заменяются какими-то неведомыми аналогами. При этом, в режиме отладки запись происходит нормально.. Куда рыть? Что это за ерунда такая? )

В базе данные хранятся в UTF-8. Отладчик x-debug, сам скрипт запускаю из командной строки вроде: php parsing.php
  • Вопрос задан
  • 84 просмотра
Подписаться 1 Оценить 1 комментарий
Решения вопроса 1
AN_ANT
@AN_ANT Автор вопроса

$data['country']= convert_tag_before_save('ru--blockchain');
$db->query("INSERT INTO art SET ?u", $data);


private function convert_tag_before_save($tag){
sscanf($tag, "%4s%s", $tr_key, $tag);
if ($tr_key =='ru--'){

$tag = mb_strtolower($tag);
$rus = array('щ', 'ш', 'ч', 'ц', 'й', 'ё', 'э', 'ю', 'я', 'х', 'ж', 'а', 'б', 'в', 'г', 'д', 'е', 'з', 'и', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'ъ', 'ы', 'ь');
$eng = array('shch', 'sh', 'ch', 'cz', 'ij', 'yo', 'ye', 'yu', 'ya', 'kh', 'zh', 'a', 'b', 'v', 'g', 'd', 'e', 'z', 'i', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'f', 'xx', 'y', 'x');

return str_replace($eng, $rus, $tag);
}

}



В режиме отладки вижу на выходе:
блокчейн

При запуске скрипта через php parser.php в базе вижу:
блокцхеиjн

Пробовал сменить кодировку на CP1251:
return mb_convert_encoding(str_replace($eng, $rus, $tag), 'CP1251')
Ничего не меняется, как шел блокцхеиjн так и идет..
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы