MrHamster
@MrHamster
Веб-программист, графический дизайнер

Как сделать совместимыми кодировки PHP и MySQL?

Суть проблемы такова: при вытягивании из SQL слов в PHP, сами слова понимаются PHP нормально, а вот отдельные буквы превращаются в каракули:
// === Здесь идут запросы ===
$word = mysql_fetch_array($result);
echo $word; // Выведется, к примеру "бороды"
echo $word[1]; // Выведется "�"

Весь код в utf-8, в начале пробовал писать "header("Content-Type: text/html; charset=utf-8");", перед запросами тоже указываю кодировку с помощью SET CHARACTER SET и SET NAMES, кодировка в БД utf8_general_ci.
В чем может быть проблема? Заранее спасибо.
  • Вопрос задан
  • 235 просмотров
Решения вопроса 2
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
Проблема в том, что вы не понимаете, что utf8 - это мультибайтовая кодировка и к буквам utf8-строк в php нельзя получить доступ через порядковый номер.
Если вам нужна вторая буква должно быть так:
$word = 'борода';
echo $word[2].$word[3];

Но предпочтительнее, конечно, нормальный вариант:
echo mb_substr($word, 1, 1, "UTF-8");
Ответ написан
Dimd13
@Dimd13
Русская (кириллическая) буква в utf8 занимает 2 байта (в cp1251 занимает 1 байт). Если вы сделаете вот такой вывод
$word = "бороды";
echo $word[0] . $word[1];

, то тогда вы увидите букву Б
Используйте это mb-substr
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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