Украинское сообщество программистов

Вопросики вместо русских букв в 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

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

Все комментарии (3) к “Вопросики вместо русских букв в 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′”);

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

  3. HELLFIRE

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

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

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

Архив

Добавить статью

Станьте автором нашего сайта!

Какие материалы подходят для публикации? — Такие.

Присылайте статьи на editors@developers.org.ua.

Подробнее.

Популярные теги

Все теги

Комментарии

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

интернет магазин бытовая техника магазин Laptoper