Здравствуйте, marx paul, Вы писали:
MP>вдруг кому будет интересно:
MP>суть в том, что в новой версии PHP вылез старый баг с parse_url() и UTF8 — на подобие этого.
MP>и этот самый parse_url некорректно парсит юникод. оттуда и головняк.
MP>то есть будьте осторожны, когда парсите урл с юникодом "стандартными" средствами PHP — может случиться весело.
По-моему с PHP всегда надо быть "на стрёме" (я вот в SoapClient весёлости нахожу в последнее время)
Здравствуйте, marx paul, Вы писали:
MP>Приветствую!
MP>Такую, братцы, мы словили граблю:
MP>Имеем страницу, в utf8, в которой прописан урл cодержащий русский язык (напр "/script.php?var=бизнес-тарифы").
MP>При клике на линке IIS7.0 пропускает это дело через URL-Rewrite 2.0 и сует ее в урл в уникоде. MP>В скрипте получаем значение этой переменной, как и ожидалось, в уникоде и сравниваем его со значением, взятым из mysql (тоже в utf8).
MP>Сравнение не проходит из-за буквы "с":
MP>значение, полученное из урл выглядит так "бизнеÑ_-тарифы"
MP>значение, полученное из базы выглядит так "бизнеÑ-тарифы"
MP>Как видим, в урл буква "с" представлена как "Ñ_", а в базе — как "Ñ". MP>Проблема касается, похоже, только буквы "с".
MP>Вопрос Чернышевского-Герцена: MP>Кто виноват? Что делать? И кому на руси жить хорошо?
MP>Другими словами, в чем корень этого странного глюка и как его разрешить?
MP>Заранее спасибо!
попробуй перед тем как скрипт в базу пишет $nvar= iconv("UTF-8","windows-1251", $_GET["var"]);
и писать не var ,а nvar
и перед тем как сравнивать принятые ГЕТом данные переводить этой функцией
и установите в базе хранение данных в windows-1251..зачем извращаться иероглифами
Здравствуйте, marx paul, Вы писали:
MP>Вопрос Чернышевского-Герцена: MP>Кто виноват? Что делать? И кому на руси жить хорошо?
Отвечу на второй вопрос. Все не-ASCII-символы надо кодировать в последовательность %HH, согласно RFC 2396. И уже потом вставлять в страницу в качестве ссылки.
Имеем страницу, в utf8, в которой прописан урл cодержащий русский язык (напр "/script.php?var=бизнес-тарифы").
При клике на линке IIS7.0 пропускает это дело через URL-Rewrite 2.0 и сует ее в урл в уникоде.
В скрипте получаем значение этой переменной, как и ожидалось, в уникоде и сравниваем его со значением, взятым из mysql (тоже в utf8).
Сравнение не проходит из-за буквы "с":
значение, полученное из урл выглядит так "бизнеÑ_-тарифы"
значение, полученное из базы выглядит так "бизнеÑ-тарифы"
Как видим, в урл буква "с" представлена как "Ñ_", а в базе — как "Ñ".
Проблема касается, похоже, только буквы "с".
Вопрос Чернышевского-Герцена:
Кто виноват? Что делать? И кому на руси жить хорошо?
Другими словами, в чем корень этого странного глюка и как его разрешить?
Здравствуйте, anonymous, Вы писали:
A>Здравствуйте, marx paul, Вы писали:
MP>>Вопрос Чернышевского-Герцена: MP>>Кто виноват? Что делать? И кому на руси жить хорошо?
A>Отвечу на второй вопрос. Все не-ASCII-символы надо кодировать в последовательность %HH, согласно RFC 2396. И уже потом вставлять в страницу в качестве ссылки.
спасибо!
но Ваш метод, к сожалению, не помогает. урл кодированные линки страдают от той же ерунды. с той же самой буквой "с"
Здравствуйте, lost_guadelenn, Вы писали:
_>Здравствуйте, marx paul.
_>С другими браузерами все нормально? _>Может проблема в тире? _>Может этот ваш url rewrite шалит?
от браузера не зависит.
дык я надеюсь, что шалит url rewrite.
токма фича эта IISовская (то бишь от MS) и не понятно как ее чинить.
Здравствуйте, marx paul.
MP>от браузера не зависит.
Значит проблема однозначно на сервере.
MP>дык я надеюсь, что шалит url rewrite. MP>токма фича эта IISовская (то бишь от MS) и не понятно как ее чинить.
А если ее отключить, все ок?