![]() |
кодировака UTF-8 в XHTML, PostgreSQL
Web-приложение, страничка с формой для логина на XHTML 1.0 UTF-8, форма обрабатывается php скриптом, который сверяет
Код:
$string = "md5".md5($password.$login); База PostgreSQL - UTF8. Вобщем логина не получается. Раньше для логина пользователей заводил отдельные таблицы для пользователей и групп, сейчас хочу воспользоваться нативными средствами PostgreSQL... раньше работало, но раньше и странички и база были в KOI8... а тут такой гемор с кодировками при работе с XMLHttpRequest, что решил лучше уж сейчас на UTF-8 переходить, чем потом, когда приложение разрастётся... Скрипт login.php простейший (пока), выводит только md5 суммы. Для отладки стал выводить (echo) получившуюся md5 сумму и сумму, которую извлекаю из базы, на экране все сходится, только комментарии на русском языке - кракозябры... стоит в браузере поставить жестко UTF8 - сумма которую я вычисляю, в UTF-8 уже другая... а сумма, которую я извлекаю из базы остаётся без изменения при переключении кодировок в браузере (при переключении, на экране свой вид не меняет)... как я понимаю, $_POST['login'] и $_POST['password'] попадают в login.php в кодировке отличной от UTF-8... логичный вопрос, а почему? Фу, объяснил как мог... :) |
Demiurg а сам скрипт какую кодовую страницу использует? Все должно соответствовать...
|
он никакую таблицу не использует, т.е. ни каких HTML заголовков в нем нет, но сама кодировка скрипта - UTF-8. После его исполнения браузер не знает кодировку документа, потому вывод (echo) - вместо русских букв кракозябры... а md5 суммы по внешнему виду совпадают, как только меняю в браузере на UTF-8, сразу видны русские буквы, а вид подсчитанной суммы изменяется (вид хеша из БД не изменяется)...
login.php без смены кодировки в браузере: Код:
---кракозябры--- Код:
Неверное имя пользователя или пароль. Пробовал в начале скрипта написать: Код:
setlocale(LC_ALL,'ru_RU.UTF-8'); |
Цитата:
Код:
header("Content-Type: text/html; charset=UTF-8"); Цитата:
|
Цитата:
|
md5 из базы то при какой кодировке создавался (когда в базу загонялся)? Такую же и надо юзать у клиента, или перекодировать данные клиента перед хешированием (с пом. iconv). Видимо из UTF-8 в koi8-r...
PHP код:
|
ru_RU.UTF-8 - это для установки кодировок локали на unix-машине - к броузеру отношение явно не имеет =)
|
Пароль создавался в базе UTF-8 (у базы родная кодировка UTF-8), потому когда мы его извлекаем он уже в UTF-8; $_POST['login'] и $_POST['password'] приходят к нам со странички index.xhtml (которая в UTF-8)... неужели данные, которые мы вводим в форму, имеют кодировку локали ОС? (в случае с FreeBSD - это KOI8-R, Windows - cp1251)?
|
Demiurg не понятно... в какой кодировке слали свои пароли пользователи, когда регистрировались? KOI8? Тады и сравнивать надо предварительно перекодировав в KOI8... кодировка базы - дело десятое...
|
Sham Данные, которые мы вводим в форму, имеют кодировку локали ОС (вне зависимости от того какую кодировку имеет документ с формой)???
|
Demiurg вводишь то - да (а по другому и никак), но afaik форма идет в кодировке странички (при преобразовании данных формы в тело запроса используется указанная (текущая) кодировка страницы)...
|
Demiurg
кодировка локали сервера вообще роли не играет. В остальном, по-моему Sham все изложил. |
В серверном скрипте убрал setlocale, оставил только header(...), все заработало...
|
Время: 02:46. |
Время: 02:46.
© OSzone.net 2001-