1 (изменено: Hase, 2012-08-12 16:50:45)

Тема: Опять эта кодировка!

Здравствуйте!
У меня опять проблема с кодировкой.

$query = "INSERT INTO hpcomments$id VALUES('$count','$user','$comment','$date','$time')"; - это запрос.

При записи в mysql он выглядит корректно.
(проверял перед самым query_mysql($query))

После записи сбивается кодировка (становится в виде ?????)
В phpmyadmin кодировка тоже отображается в виде вопросов, то есть это не ошибка при выводе. Если Подобной запрос сделать сразу в phpmyadmin, то кодировка не сбивается. Подскажите пожалуйста, как можно это исправить.

Заранее спасибо!

2

Re: Опять эта кодировка!

Проверьте кодировку таблиц, кодировку файлов скрипта и наличие после функции mysql_connect строки устанавливающей кодировку соединения с MySQL (пример для windows-1251):

mysql_query('SET NAMES cp1251');

3

Re: Опять эта кодировка!

Сравнение таблицы: Сравнение    cp1251_general_ci
Кодировка скрипта: ANSI
После connect_mysql стоит:

mysql_query('SET NAMES cp1251');
mysql_query("SET CHARACTER SET 'cp1251'");

Вроде бы все нормально, никогда такого не было (конфигурацию скриптов и сервера никогда не меняю), а тут такое sad

4

Re: Опять эта кодировка!

Попробуйте в корень хоста положить файл .htaccess со строкой:

PHP_VALUE default_charset windows-1251

5

Re: Опять эта кодировка!

Он уже есть, в нем такое содержание:

AddDefaultCharset windows-1251
PHP_VALUE default_charset windows-1251

Если убрать, то кодировка сбивается в другую...

6

Re: Опять эта кодировка!

Должно работать. Проверяйте скрипт, какие данные в него приходят. Пробуйте тестовую вставку данных записать, не из переменных, а прописав данные прямо в запрос.

7

Re: Опять эта кодировка!

Попробовал. Сразу данные в запрос. Сделал его в отдельной страничке (создал test.php). В ней только подключение, указание кодировки, и этот запрос. Может на скрипт влиять кодировка сервера?

8

Re: Опять эта кодировка!

Hase сказал:

Может на скрипт влиять кодировка сервера?

Кодировка PHP указывается в default_charset, больше кодировок я не знаю.

9

Re: Опять эта кодировка!

Хм, вот в чем крылась проблема:

Было так

mysql_connect('localhost', 'root', 'password') or die(mysql_error());
mysql_query('SET NAMES cp1251');
mysql_query("SET CHARACTER SET 'cp1251'");
mysql_select_db('hpdatabase') or die (mysql_error());

Стало так

mysql_connect('localhost', 'root', 'password') or die(mysql_error());
mysql_select_db('hpdatabase') or die (mysql_error());
mysql_query('SET NAMES cp1251');
mysql_query("SET CHARACTER SET 'cp1251'");

10

Re: Опять эта кодировка!

Проблема в том, что вы используете root, на него не влияет SET NAMES. Заведите для скрипта отдельного пользователя MySQL выделив ему только необходимые привилегии, исключая те, что указаны в phpMyAdmin в разделе "Администрирование".

Эта строка не нужна:
mysql_query("SET CHARACTER SET 'cp1251'");

11

Re: Опять эта кодировка!

Хорошо, спасибо, Вам, Виктор, огромное)