Блог разработчиков

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

Скакунов Александр
Опубликовано 19.02.2006 в Учеба

Что делать, если РНР выводит русский текст из БД в виде знаков вопроса? Такой эффект чаще всего получается, если данные попали из одного приложения (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>

Теги: , , ,

1 звезда2 звезды3 звезды4 звезды5 звезд (4 голосов, средний: 5 из 5)
Загрузка ... Загрузка ...
Распределение голосов

Понравилась статья? Подпишись на обновления по RSS/E-mail

Подписаться, не оставляя комментарий

Все комментарии (2) к “Вопросики вместо русских букв в PHP” RSS

  1. YoSite говорит:

    Существует путь попроще

    файл бд в utf
    и просто после каждого запроса на коннект к бд прописываем

    mysql_query(”SET NAMES cp1251″); mysql_query(”COLLATE ‘utf8′ “);

    ;)

    yosite.net

  2. Усупов Батырбек говорит:

    Мучился неделю. Хостеры футболили туда-сюда. даже подумывал сменить хостера.
    но потом добавил след. строку и все заработало как часики.
    после каждого запроса на коннект к бд прописываем

    mysql_query(”SET NAMES utf8″); mysql_query(”COLLATE ‘utf8′”);

    спасибо всем… спасибо йосайт.нет

Оставить комментарий

Указать свой сайт могут только зарегистрированные пользователи. Регистрация или вход.

Архив

Комментарии

Последние комментарии