Решено: кодировка php

Модератор: Модераторы разделов

Toy
Сообщения: 112
Статус: Профессиональный задрот
ОС: OS X

Решено: кодировка php

Сообщение Toy »

Добрый вечер, столкнулся со следующей проблемой:
Есть кусочек php кода

Код: Выделить всё

mysql_connect($db_host,$db_user,$db_password) or die("Подключение невозможно: ".mysql_error());

Когда срабатывает or die() в браузере получается странная вещь "Подключение невозможно" - пишется русскими буквами, а на том месте где должно быть "Доступ закрыт для пользователя 'root'@'localhost' (был использован пароль: ДА)" - каракули. Если поменять в браузере кодировку с utf8 на koi8-r то получается всё в точности наоборот (вместе "Подключение невозможно" - каракули, "Доступ закрыт для пользователя 'root'@'localhost' (был использован пароль: ДА)" - всё нормально).
Апач настроен на utf8, директива default_encoding в php,ini имеет значение utf8, браузер настроен на utf8.. В чём может быть проблема?
os kubuntu 8.10, Apache/2.2.9 PHP/5.2.6-2
Спасибо сказали:
Аватара пользователя
agentprog
Сообщения: 362
Статус: Ad Astra per aspera
ОС: openSUSE 11.4, Arch

Re: Решено: кодировка php

Сообщение agentprog »

если база данных - mysql, и в наличии phpMyAdmin, то я думаю нужно ковырять именно его.
No problems - just solutions!
Спасибо сказали:
Toy
Сообщения: 112
Статус: Профессиональный задрот
ОС: OS X

Re: Решено: кодировка php

Сообщение Toy »

agentprog писал(а):
20.03.2009 21:16
если база данных - mysql, и в наличии phpMyAdmin, то я думаю нужно ковырять именно его.

база mysql. phpMyAdmin не имею, учусь составлять свои запросы.
А что там можно наковырять? Может в my.cnf чего? Хотя там тоже default-charset=utf8
Спасибо сказали:
Аватара пользователя
agentprog
Сообщения: 362
Статус: Ad Astra per aspera
ОС: openSUSE 11.4, Arch

Re: Решено: кодировка php

Сообщение agentprog »

Toy писал(а):
20.03.2009 21:12
Если поменять в браузере кодировку с utf8 на koi8-r то получается всё в точности наоборот

ну значит default-charset=koi8-r
:)
No problems - just solutions!
Спасибо сказали:
Toy
Сообщения: 112
Статус: Профессиональный задрот
ОС: OS X

Re: Решено: кодировка php

Сообщение Toy »

agentprog писал(а):
20.03.2009 21:22
ну значит default-charset=koi8-r
:)

Как и предполагал, ничего не изменилось. Почему кодировка mysql должна влиять на вывод диагностических ошибок php?
Спасибо сказали:
Аватара пользователя
agentprog
Сообщения: 362
Статус: Ad Astra per aspera
ОС: openSUSE 11.4, Arch

Re: Решено: кодировка php

Сообщение agentprog »

как мы выясняем проблема в выводе функции mysql_error(). кодировка других сообщений нормальная, предполагаем, что в самом пхп кодировка настроена правильно. я точно не в курсе что использует mysql_error, но скорее всего это или запись в самой базе данных или файл перевода. предположил, что это запись в базе данных, поэтому предложил проверить кодировку базы. пойду проверю у себя настройки ))
No problems - just solutions!
Спасибо сказали:
Аватара пользователя
agentprog
Сообщения: 362
Статус: Ad Astra per aspera
ОС: openSUSE 11.4, Arch

Re: Решено: кодировка php

Сообщение agentprog »

в общем, в качестве сервачка для тестов у меня стоит lampp, после ковыряния был обнаружен тот самый файлик с переводами по адресу /opt/lampp/share/mysql/russian. где в настоящем апач-пхп-мускуль это находится в данный момент глянуть не могу, но там действительно написано, что кодировка для русского перевода koi8-r. осталось найти это файло :)
кстати, mysql после смены кодировки перезапускал?
No problems - just solutions!
Спасибо сказали:
Toy
Сообщения: 112
Статус: Профессиональный задрот
ОС: OS X

Re: Решено: кодировка php

Сообщение Toy »

agentprog писал(а):
20.03.2009 22:09
в общем, в качестве сервачка для тестов у меня стоит lampp, после ковыряния был обнаружен тот самый файлик с переводами по адресу /opt/lampp/share/mysql/russian. где в настоящем апач-пхп-мускуль это находится в данный момент глянуть не могу, но там действительно написано, что кодировка для русского перевода koi8-r. осталось найти это файло :)
кстати, mysql после смены кодировки перезапускал?

Да, перезапускал. Насчёт файла russian/errmsg.sys понял.. Значит нужно ковырять мускул? Или всё-таки похапэ? :)
Спасибо сказали:
Аватара пользователя
agentprog
Сообщения: 362
Статус: Ad Astra per aspera
ОС: openSUSE 11.4, Arch

Re: Решено: кодировка php

Сообщение agentprog »

как бы это перевод мускуля, так что где то надо в mysql'ных конфигах подправить ))
No problems - just solutions!
Спасибо сказали:
Toy
Сообщения: 112
Статус: Профессиональный задрот
ОС: OS X

Re: Решено: кодировка php

Сообщение Toy »

Вобщем я в my.cnf поменял значение директивы language с russian на english, всё заработало.
Но ситуация с русским языком остаётся не разгадана, кто сможет помочь, буду очень благодарен!
agentprog, вам спасибо за некоторые разъяснения
Спасибо сказали:
Toy
Сообщения: 112
Статус: Профессиональный задрот
ОС: OS X

Re: Решено: кодировка php

Сообщение Toy »

Погуглил, получил некоторую информацию. В папке /usr/share/mysql/russian длжны быть 2 файла errmsg.sys и errmsg.txt. первый походу в каком-то закодированном виде утилитой comp_err, понятный mysql. а со вторым можно совершать различные операции, в том числе и смена кодировки. Но у себя я нашёл только файл errmsg.sys. попробовал его скопировать и переименовать в errmsg.txt, затем выполнил следующее

Код: Выделить всё

iconv -f utf-8 -f koi8-r errmsg.txt

в консоли что-то вывелось, но в файл не записалось, здаётся мне я неправильно использую iconv.
У кого есть оба файла (errmsg sys и txt) они идентичны? Тоесть можно просто скопировать sys в txt чтобы потом перекодировать? Если да, тогда зачем утилита comp_err?
Вот такие возникли вопросы, знатоки, будьте добры, помогите решить данную задачку.
Спасибо сказали:
Аватара пользователя
agentprog
Сообщения: 362
Статус: Ad Astra per aspera
ОС: openSUSE 11.4, Arch

Re: Решено: кодировка php

Сообщение agentprog »

errmsg.sys не просто перекодированный и зашифрованный errmsg.txt, там в начале есть нечто двоичное. по запуску comp_err --help понятно, что он скорее всего перекодирует входной файл в errmsg.sys. наверное можно сменить кодировку в errmsg.txt и скомпилить это в errmsg.sys.
ps это чисто предположение, сам никогда так глубоко не копал, ибо пользовался английским вариантом вывода ошибок ))
No problems - just solutions!
Спасибо сказали:
Toy
Сообщения: 112
Статус: Профессиональный задрот
ОС: OS X

Re: Решено: кодировка php

Сообщение Toy »

agentprog писал(а):
21.03.2009 10:53
errmsg.sys не просто перекодированный и зашифрованный errmsg.txt, там в начале есть нечто двоичное. по запуску comp_err --help понятно, что он скорее всего перекодирует входной файл в errmsg.sys. наверное можно сменить кодировку в errmsg.txt и скомпилить это в errmsg.sys.
ps это чисто предположение, сам никогда так глубоко не копал, ибо пользовался английским вариантом вывода ошибок ))

Мнея тоже полностью устраивает английский вариант. но тут уже дело принципа и интереса, думаб понимаете )
Спасибо сказали:
Аватара пользователя
agentprog
Сообщения: 362
Статус: Ad Astra per aspera
ОС: openSUSE 11.4, Arch

Re: Решено: кодировка php

Сообщение agentprog »

если бы не принцип, у меня не было бы прикручено к линуксу вебкамеры, принтера и сканера ;)
No problems - just solutions!
Спасибо сказали:
Selius
Сообщения: 32
ОС: Debian GNU/Linux Squeeze

Re: Решено: кодировка php

Сообщение Selius »

У меня файл errmsg.txt лежит на уровень выше, т.е. в /usr/share/mysql/. Там во вполне понятном текстовом формате описаны переводы для разных языков. Русский перевод отображается корректно именно в koi8-r.
Ну следовательно, чтобы получить то, что нужно, сделать нужно примерно следующее:

Код: Выделить всё

iconv -f koi8-r -t utf-8 -o errmsg.txt.new errmsg.txt
mv errmsg.txt errmsg.txt.old
mv errmsg.txt.new errmsg.txt
comp_err -F errmsg.txt --out_file=errmsg.sys -D ./

Поможет ли с кодировкой: не уверен, но сама генерация файлов errmsg.sys работает.
Да, и лучше бэкап этой директории сделать, на всякий случай,
Спасибо сказали:
Toy
Сообщения: 112
Статус: Профессиональный задрот
ОС: OS X

Re: Решено: кодировка php

Сообщение Toy »

Selius писал(а):
21.03.2009 11:43
У меня файл errmsg.txt лежит на уровень выше, т.е. в /usr/share/mysql/. Там во вполне понятном текстовом формате описаны переводы для разных языков. Русский перевод отображается корректно именно в koi8-r.
Ну следовательно, чтобы получить то, что нужно, сделать нужно примерно следующее:

Код: Выделить всё

iconv -f koi8-r -t utf-8 -o errmsg.txt.new errmsg.txt
mv errmsg.txt errmsg.txt.old
mv errmsg.txt.new errmsg.txt
comp_err -F errmsg.txt --out_file=errmsg.sys -D ./

Поможет ли с кодировкой: не уверен, но сама генерация файлов errmsg.sys работает.
Да, и лучше бэкап этой директории сделать, на всякий случай,

В точку! Спасибо большое, всё нормально отображается!
Спасибо сказали: