Вопросики вместо русских букв в PHP

Что делать, если РНР выводит русский текст из БД в виде знаков вопроса? Такой эффект чаще всего получается, если данные попали из одного приложения (phpMyAdmin), а выводятся в другом (ваша страница), и кодировки этих двух аппликух не совпали.

Чтобы всё работало как часики, нужно чтобы кодировки на входе и на выходе были одинаковые (если не охота возюкаться с преобразованиями).

Для начала неплохо выяснить, в какой кодировке работает ваше приложение:

<? $sql = "SHOW SESSION VARIABLES LIKE 'character_set_connection'"; $res = $db->query($sql); $res = mysql_query($sql); print_r(mysql_result($res, 0, 1)); echo "<hr/>"; $sql = "SHOW SESSION VARIABLES LIKE 'collation_connection'"; $res = mysql_query($sql); print_r(mysql_result($res, 0, 1)); echo "<hr/>"; ?>

Эти два нехитрых запроса выведут кодировку (character set) и сравнение (collation) вашего соединения. У меня они чаще всего равняются «latin1» и «latin1_swedish_ci» соответственно.

Теперь необходимо выяснить, в какой кодировке работает выше «входное» приложение. Это можно сделать либо выполнив приведённые запросы прямо в нём (если позволяет), либо посмотрев логи MySQL на предмет выполняемых запросов в момент инициализации «входного» приложения. Что касается phpMyAdmin, то он выполняет два приведенных ниже запроса, чтобы работать в кодировке utf8, которая рекомендуется для работы с национальными кодировками типа русской:

SET NAMES utf8 SET collation_connection = 'utf8_general_ci'

Таким образом, ваша задача состоит в запуске этих же запросов в начале вашего приложения.

Если теперь знаки вопроса сменились абракадаброй, то это уже прогресс! Тогда нужно выставить кодировку страницы в броузере:

<head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> </head>

  • Популярное

4 комментария

Подписаться на комментарииОтписаться от комментариев Комментарии могут оставлять только пользователи с подтвержденными аккаунтами.

Огромное спасибо! Мучался очень долго, на одном хосте работало — только в путь, а на другом ну ни в какую, благодаря вам — справедливость восторжествовала!

Александр Скакунов, спасибо помогло!!!

Мучился неделю. Хостеры футболили туда-сюда. даже подумывал сменить хостера.но потом добавил след. строку и все заработало как часики.после каждого запроса на коннект к бд прописываем mysql_query («SET NAMES utf8»); mysql_query («COLLATE ’utf8’»); спасибо всем... спасибо йосайт.нет

Существует путь попрощефайл бд в utfи просто после каждого запроса на коннект к бд прописываем mysql_query («SET NAMES cp1251»); mysql_query («COLLATE ’utf8’ »); ;) yosite.net

Подписаться на комментарии