Консультация № 183931
28.08.2011, 21:08
65.00 руб.
0 8 1
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:

У меня возникла проблема с отображением данных вводимых в таблицу БД mySQL русскими буквами. В браузерах отображаются вопросительные знаки или квадратики:




В коде стоит кодировка Юникод(utf-8). И в браузере при кодировке Юникод выводятся страницы в вышеуказанном варианте. Если меняю кодировку браузера на Кирилица (Windows-1251),то все выглядит по другому:




Я только начинаю изучение PHP,и поэтому мои знания в данной области весьма поверхностные,но я предполагаю что данная проблема возникает из-за неправильной кодировки при выполнении запроса к базе данных или при выводе данных из нее.

Версия phpMyAdmin:2.5.6
MySQL: 3.23.53-max
В самой таблице БД русские буквы отображаются тоже корректно.

Не могли бы Вы поподробнее описать способ решения данной проблемы,делая скидку на слабое образование народных масс в данном вопросе.

Приложение:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Соеденение с БД</title>
</head>

<body>

<?php

$db = mysql_connect("localhost","Alex","12345");
mysql_select_db("firstbd",$db);
mysql_query('SET NAMES windows-1251');

$result = mysql_query("SELECT * FROM firma",$db);

$myrow = mysql_fetch_array($result);

echo $myrow["lastname"]."
"."
";

do
{
printf ("Сотрудник N - %s
Имя - %s
Фамилия - %s
Должность - %s

",$myrow['id'],$myrow['name'],$myrow['lastname'],$myrow['dol']);
}

while ($myrow = mysql_fetch_array($result));

?>

</body>
</html>

Обсуждение

давно
Мастер-Эксперт
425
4118
29.08.2011, 15:38
общий
Попробуйте вместо:
mysql_query('SET NAMES windows-1251');

написать:
mysql_query('SET NAMES utf-8');

или
mysql_query('SET NAMES utf8');

чтобы кодировка получаемых результатов из БД была такой же, какую Вы задаёте на своей HTML-странице:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">


PS: Уж больно у Вас версия MySQL старовата...
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Неизвестный
29.08.2011, 17:53
общий
mysql_query('SET NAMES utf-8')
и
mysql_query('SET NAMES utf8');
не помогло.
При изменении мета тега тоже никаких изменений.

Уж больно у Вас версия MySQL старовата...


Пробовал на более новой версии. Результат тот же.
давно
Мастер-Эксперт
425
4118
30.08.2011, 11:25
общий
30.08.2011, 11:27
Значит Ваш сервер не поддерживает UTF-8. Это очень и очень печально...
Напишите так:
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
...
mysql_query('SET NAMES windows-1251');

И учтите, все строки, которые Вы пишете в теле HTML-документа (т.е. то, что у Вас будет выводиться помимо данных из БД), должны быть именно в кодировке 1251.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Неизвестный
30.08.2011, 13:28
общий
Пробовал. Тоже не помогло. У меня все стоит на локальном хосте. Буду пробовать еще раз перейти на более новую версию MySQL. Может сама БД не поддерживает одну из кодировок.
давно
Мастер-Эксперт
425
4118
30.08.2011, 16:01
общий
Цитата: 380301
Может сама БД не поддерживает одну из кодировок.

Не в этом дело. Сама БД вообще никаких кодировок не поддерживает. Кодировки - дело сервера. Но когда Вы создаёте базу, туда (в базу) прописывается кодировка таблиц, либо Вами вручную, в предложении CREATE TABLE, либо, если Вы кодировку не указали - автоматически, ту кодировку, которая по умолчанию принята на сервере.
Узнать, какая у Вас кодировка таблицы можно таким кодом (после соединения с БД):
Код:
SHOW CREATE TABLE firma

У Вас выскочит код создания таблицы и где-то в самом конце будет стоять предложение:
DEFAULT CHARSET=

после символа "=" будет стоять название кодировки таблицы.
Однако для получателя данных запросов совершенно неважно, в какой кодировке таблицы базы, т.к. сервер результат запроса, перед тем как послать его клиенту, может перекодировать в любую кодировку, который сам сервер поддерживает. Для того, чтобы сервер выдавал результаты в правильной кодировке, у Вас как раз и стоит:
mysql_query('SET NAMES windows-1251');


Цитата: 380301
Пробовал. Тоже не помогло.

Вы где-то ещё допустили ошибку и я подозреваю, что Вы код страницы продолжаете писать не в кодировке 1251. Дело в том, что на Вашем рисунке, там где Вы говорите, что поменяли в браузере кодировку на 1251, Ваши данные из базы выводятся корректно. Следовательно и исходный код страницы должен писаться в этой же кодировке, т.к. на странице присутствуют другие слова на русском языке. Согласитесь - это логично, чтобы весь текст был в одной кодировке. У Вас же в теге мета указано, что код всего остального текста на странице (не результата запроса) UTF-8. Поэтому у Вас не будет ничего получатся до тех пор, пока код страницы Вы не напишете в кодировке 1251.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Неизвестный
30.08.2011, 23:39
общий
30.08.2011, 23:48
Вы где-то ещё допустили ошибку и я подозреваю, что Вы код страницы продолжаете писать не в кодировке 1251. Дело в том, что на Вашем рисунке, там где Вы говорите, что поменяли в браузере кодировку на 1251, Ваши данные из базы выводятся корректно. Следовательно и исходный код страницы должен писаться в этой же кодировке, т.к. на странице присутствуют другие слова на русском языке. Согласитесь - это логично, чтобы весь текст был в одной кодировке. У Вас же в теге мета указано, что код всего остального текста на странице (не результата запроса) UTF-8. Поэтому у Вас не будет ничего получатся до тех пор, пока код страницы Вы не напишете в кодировке 1251.


Вы,наверное,правы. Я писал скрипт в программе DreamWeaver CS3. И вот,что получается:



Кодировка UTF-8.В коде все отображается корректно. Теперь меняю кодировку в коде на Windows-1251



Как видно в коде после смены кодировки вместо русских букв кракозябры и в названии документа тоже.Да и латинские буквы какие-то кривые стали. Есть какое-нибудь лекарство или надо другую версию редактора искать?
давно
Мастер-Эксперт
425
4118
31.08.2011, 04:58
общий
Видимо Вам нужно взять другой редактор, в котором есть возможность смены кодировок. С DreamWeaver'ом я не знаком, поэтому проконсультировать Вас по нему не могу. Но попробуйте поискать в менюшках, может быть там есть где-то возможность смены кодировки именно окна редактирования текста страницы.
Либо удалите Ваш старый сервер MySQL (который 3.23) и установите свежую версию, которая поддерживает кодировку UTF-8, тогда Вы сможете результат запроса получать в кодировке UTF-8 с помощью "SET NAMES utf8".
Скачать можно отсюда: ссылка для скачивания.
Только выберите там свою операционную систему.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
давно
Мастер-Эксперт
425
4118
02.09.2011, 10:40
общий
это ответ
Здравствуйте, PreUpgrade!

Как выяснилось из переписки в мини-форуме, Ваш сервер MySQL 3.23.53 не поддерживает кодировку UTF-8 и поэтому не может выдавать результаты запросов в этой кодировке. Однако, используемый Вами редактор DreamWeaver использует по умолчанию кодировку UTF-8. Таким образом, у Вас не совпадают кодировки Вашей веб-страницы (UTF-8) и получаемого запроса (Windows-1251).
Какие могут быть рекомендации по этому поводу:
1. Наиболее предпочтительный вариант - удалить Ваш старый MySQL сервер и поставить более новую версию. Скачать можно отсюда: ссылка для скачивания. Современная версия MySQL (начиная с 4.0) без проблем поддерживает кодировку UTF-8, поэтому сервер может выдавать результаты запросов именно в той кодировке, в которой у Вас разрабатывается веб-страница. Для того, чтобы результат запроса получался в кодировке UTF-8, необходимо будет сразу же после соединения с сервером дать ему такую команду:
Код:
mysql_query('SET NAMES utf8');

2. Если Вы категорически не хотите менять версию сервера, то можно сменить редактор разработки Ваших веб-страниц на тот, который поддерживает кодировку "Windows-1251". Таких редакторов очень много и я затрудняюсь посоветовать Вам что либо конкретное. Примерный список можно посмотреть здесь:
Список редакторов HTML\PHP, в том числе и бесплатных.
К сожалению с DreamWeaver'ом я не знаком, т.к. предпочитаю использовать бесплатные версии программ, поэтому, как в нём сменить кодировку редактора сказать затрудняюсь.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Форма ответа