Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Проблемы с кодировкой при работе PHP+MySQL
Покинул форум
Сообщений всего: 5
Дата рег-ции: Март 2012
Помог: 0 раз(а)
Учусь по книге Лауры Томсон и Люка Веллинга «Разработка веб-приложений на PHP и MySQL , 4-е издание». Все было хорошо, все получалось, пока не дошло дело до баз данных. В этой книге абсолютно ничего не сказано про кодирвки; я даже PDF версии предыдущих изданий скачал и делал поиск по ключевым словам типа «charset», «utf8», « cp1251» и т.д. Ничего. Я не понимаю как можно было авторам упустить этот столь важный момент в создании сайтов и почему в интернете все так рекомендуют эту книгу.
Вы, наверно, уже поняли: у меня не отображается кириллица ни в MySQL monitor, ни в браузере. Лезут кракозябры.
4 дня подряд я гуглил и пытался отладить тот код, который дается в книге. У меня получилось создать базу данных, содержимое в которой корректно отображается в MySQL monitor,а также в браузере, но как бы это не было смешно: я не помню что я конкретно я сделал. Да и нормально с этой моей БД работает только один php-сценарий, а остальные будто не видят ее.
В общем, ребята, прошу вашей помощи. Я вкратце изложу весь процесс, который дан в книге.
1) Предлагается создать базу данных через MySQL monitor командой CREATE DATABASE books;
Создал.
2) Выхожу из MySQL monitor командой quit и создаю таблицы из файла bookorama.sql командой mysql –uroot -Dbooks –ppass@word1 < bookorama.sql
Содержимое файла bookorama.sql:
( customerid int UNSIGNEDNOTNULLAUTO_INCREMENTPRIMARYKEY,
name char(50)NOTNULL,
address char(100)NOTNULL,
city char(30)NOTNULL
);
CREATETABLE orders
( orderid int UNSIGNEDNOTNULLAUTO_INCREMENTPRIMARYKEY,
customerid int UNSIGNEDNOTNULL,
amount float(6,2),
date date NOTNULL
);
CREATETABLE books
( isbn char(13)NOTNULLPRIMARYKEY,
author char(50),
title char(100),
price float(4,2)
);
CREATETABLE order_items
( orderid int UNSIGNEDNOTNULL,
isbn char(13)NOTNULL,
quantity tinyint UNSIGNED,
PRIMARYKEY(orderid, isbn)
);
CREATETABLE book_reviews
( isbn char(13)NOTNULLPRIMARYKEY,
review text
);
Создал.
3) Вставляем данные в нашу БД из файла book_insert.sql командой mysql –uroot –Dbooks –ppass@word1 < book_insert.sql
Содержимое файла book_insert.sql:
("5-8459-0426-9","Родерик Смит","Сетевые средства Linux", 49.99);
INSERTINTO order_items VALUES
(1,"5-8459-0046-8",2),
(2,"5-8459-0426-9",1),
(3,"5-8459-0426-9",1),
(3,"5-8459-1134-6",1),
(4,"5-8459-1082-X", 3);
INSERTINTO book_reviews VALUES
("5-8459-0046-8","Книга Моргана написана исключительно понятно и может счи-таться одной из лучших базовых книг по Java.");
Получилось.
4) Заходим обратно в MySQL monitor:
- выбираем нашу БД командой use books;
-пробуем посмотреть содержимое таблицы customers командой select * from customers;
И вот тут лезут каракули вместо букв русского алфавита.
5) Открываем файл search.html:
<title>Магазин "Буквофил" – Поиск в каталоге</title>
</head>
<body>
<h1>Магазин "Буквофил" - Поиск в каталоге</h1>
<formaction="results.php"method="post">
Выберите тип поиска: <selectname="searchtype">
<optionvalue="author">По автору</option>
<optionvalue="title">По названию</option>
<optionvalue="isbn">По ISBN</option>
</select>
Введите информацию для поиска: <inputtype="text"name="searchterm"size="40"/>
<inputtype="submit"name="submit"value="Найти"/>
</form>
</body>
</html>
Пробуем сделать поиск. Поиск работает, но нормально отображаются только латинские буквы и цифры. Кириллица – каракули.
Код файла-обработчика result.php:
Вот и все. Что да как я менял и пробовал - писать не буду. Думаю, тем, кто разбирается в этом, сказать что делать проще, чем читать кучу моего хлама.
Использованные программы:
-MySQL 5.5.21
-PHP 5.3.9
-Apache2.2
Кодировки в файле my.ini, находящегося в дериктории C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.5 следующие:
[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8
Файлы bookorama.sql и book_insert.sql в ANSI кодировке.
Css-community
Отправлено: 13 Марта, 2012 - 09:16:28
Новичок
Покинул форум
Сообщений всего: 6
Дата рег-ции: Февр. 2012 Откуда: Саранск
Помог: 0 раз(а)
Попробуйте после подключения к базе выполнить запрос
Покинул форум
Сообщений всего: 245
Дата рег-ции: Июль 2010
Помог: 1 раз(а)
Проверьте кодировки:
1. Кодировки созданных таблиц.
2. Кодировки файлов php, которые работают с базой.
3. Кодировку, которую выставляет браузер для html страницы. Должна быть utf8
*.sql файлы тоже конвертируйте в utf8
DeepVarvar
Отправлено: 15 Марта, 2012 - 10:05:57
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Frants пишет:
Лауры Томсон и Люка Веллинга
так это ж нерусь - у них нет проблем с кодировкой, вот и не пишут про неё
Покинул форум
Сообщений всего: 5
Дата рег-ции: Март 2012
Помог: 0 раз(а)
Dezmont пишет:
Проверьте кодировки:
1. Кодировки созданных таблиц.
2. Кодировки файлов php, которые работают с базой.
3. Кодировку, которую выставляет браузер для html страницы. Должна быть utf8
*.sql файлы тоже конвертируйте в utf8
В этом и была проблема, теперь все работает. Спасибо!
snikers987
Отправлено: 15 Марта, 2012 - 11:28:28
Участник
Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011 Откуда: Крым
Помог: 25 раз(а)
$mysqli->set_charset('utf8');
вообще тема достаточно изжована.
----- Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
Frants
Отправлено: 15 Марта, 2012 - 11:32:46
Новичок
Покинул форум
Сообщений всего: 5
Дата рег-ции: Март 2012
Помог: 0 раз(а)
snikers987 пишет:
$mysqli->set_charset('utf8');
и совсем не это...
snikers987
Отправлено: 15 Марта, 2012 - 11:47:23
Участник
Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011 Откуда: Крым
Помог: 25 раз(а)
Frants пишет:
snikers987 пишет:
$mysqli->set_charset('utf8');
и совсем не это...
Да, конечно, Вам это не подходит, не стоит слушать советов написаных в официальной документации.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.