Re[2]: проблема локализована: PHP, parse_url(), UTF8
От: Курилка Россия http://kirya.narod.ru/
Дата: 07.08.10 06:23
Оценка: 3 (1) :)
Здравствуйте, marx paul, Вы писали:

MP>вдруг кому будет интересно:


MP>суть в том, что в новой версии PHP вылез старый баг с parse_url() и UTF8 — на подобие этого.


MP>и этот самый parse_url некорректно парсит юникод. оттуда и головняк.


MP>то есть будьте осторожны, когда парсите урл с юникодом "стандартными" средствами PHP — может случиться весело.


По-моему с PHP всегда надо быть "на стрёме" (я вот в SoapClient весёлости нахожу в последнее время)
Re: UTF8: проблема с буквой "с"
От: Аноним  
Дата: 16.06.10 22:16
Оценка: -2
Здравствуйте, 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..зачем извращаться иероглифами
Re: UTF8: проблема с буквой "с"
От: anonymous Россия http://denis.ibaev.name/
Дата: 15.06.10 16:34
Оценка: 2 (1)
Здравствуйте, marx paul, Вы писали:

MP>Вопрос Чернышевского-Герцена:

MP>Кто виноват? Что делать? И кому на руси жить хорошо?

Отвечу на второй вопрос. Все не-ASCII-символы надо кодировать в последовательность %HH, согласно RFC 2396. И уже потом вставлять в страницу в качестве ссылки.
UTF8: проблема с буквой "с"
От: marx paul Германия Провести онлайн-опрос
Дата: 15.06.10 15:26
Оценка:
Приветствую!

Такую, братцы, мы словили граблю:

Имеем страницу, в utf8, в которой прописан урл cодержащий русский язык (напр "/script.php?var=бизнес-тарифы").

При клике на линке IIS7.0 пропускает это дело через URL-Rewrite 2.0 и сует ее в урл в уникоде.
В скрипте получаем значение этой переменной, как и ожидалось, в уникоде и сравниваем его со значением, взятым из mysql (тоже в utf8).


Сравнение не проходит из-за буквы "с":

значение, полученное из урл выглядит так "бизнеÑ_-тарифы"

значение, полученное из базы выглядит так "бизнес-тарифы"

Как видим, в урл буква "с" представлена как "Ñ_", а в базе — как "Ñ".
Проблема касается, похоже, только буквы "с".

Вопрос Чернышевского-Герцена:
Кто виноват? Что делать? И кому на руси жить хорошо?

Другими словами, в чем корень этого странного глюка и как его разрешить?

Заранее спасибо!
Провести онлайн-опрос
Online-Umfrage erstellen
Re[2]: UTF8: проблема с буквой "с"
От: marx paul Германия Провести онлайн-опрос
Дата: 16.06.10 06:38
Оценка:
Здравствуйте, anonymous, Вы писали:

A>Здравствуйте, marx paul, Вы писали:


MP>>Вопрос Чернышевского-Герцена:

MP>>Кто виноват? Что делать? И кому на руси жить хорошо?

A>Отвечу на второй вопрос. Все не-ASCII-символы надо кодировать в последовательность %HH, согласно RFC 2396. И уже потом вставлять в страницу в качестве ссылки.


спасибо!
но Ваш метод, к сожалению, не помогает. урл кодированные линки страдают от той же ерунды. с той же самой буквой "с"
Провести онлайн-опрос
Online-Umfrage erstellen
Re: UTF8: проблема с буквой "с"
От: DoС  
Дата: 16.06.10 19:05
Оценка:
Здравствуйте, marx paul, Вы писали:


MP>Как видим, в урл буква "с" представлена как "Ñ_", а в базе — как "Ñ".


Может быть какие нибудь проблемы с UNICODE NORMALIZATION FORMS ?

Попробуйте сменить "юникодную форму" для символов

жава

 String csv = "オノダ ユウイチタカハシノブヒト";
 String cdb = "オノダ ユウイチタカハシノブヒト";
 String normalized_csv;
 String normalized_cdb;
 Normalizer.Form currentForm = java.text.Normalizer.Form.NFKC;
 normalized_csv = Normalizer.normalize(csv, currentForm);
 normalized_cdb = Normalizer.normalize(cdb, currentForm);
 
 System.out.println("csv==cdb " + cdb.equals(csv));
 System.out.println("ncsv==ncdb " + normalized_cdb.equals(normalized_csv));
Re: UTF8: проблема с буквой "с"
От: lost_guadelenn  
Дата: 29.06.10 12:02
Оценка:
Здравствуйте, marx paul.

С другими браузерами все нормально?
Может проблема в тире?
Может этот ваш url rewrite шалит?
Re[2]: UTF8: проблема с буквой "с"
От: marx paul Германия Провести онлайн-опрос
Дата: 29.06.10 23:59
Оценка:
Здравствуйте, lost_guadelenn, Вы писали:

_>Здравствуйте, marx paul.


_>С другими браузерами все нормально?

_>Может проблема в тире?
_>Может этот ваш url rewrite шалит?

от браузера не зависит.

дык я надеюсь, что шалит url rewrite.
токма фича эта IISовская (то бишь от MS) и не понятно как ее чинить.
Провести онлайн-опрос
Online-Umfrage erstellen
Re[3]: UTF8: проблема с буквой "с"
От: lost_guadelenn  
Дата: 01.07.10 10:47
Оценка:
Здравствуйте, marx paul.

MP>от браузера не зависит.

Значит проблема однозначно на сервере.

MP>дык я надеюсь, что шалит url rewrite.

MP>токма фича эта IISовская (то бишь от MS) и не понятно как ее чинить.
А если ее отключить, все ок?

Вот простой пример на php:
<?php

if(isset($_GET['var']))
    echo '!'.$_GET['var'].'!<br>';
echo '<a href="/test.php?var=бизнес-тарифы"> тынц </a>';

?>


Никаких подчеркиваний не добавляется.
Re: проблема локализована: PHP, parse_url(), UTF8
От: marx paul Германия Провести онлайн-опрос
Дата: 06.08.10 22:59
Оценка:
вдруг кому будет интересно:

суть в том, что в новой версии PHP вылез старый баг с parse_url() и UTF8 — на подобие этого.

и этот самый parse_url некорректно парсит юникод. оттуда и головняк.

то есть будьте осторожны, когда парсите урл с юникодом "стандартными" средствами PHP — может случиться весело.
Провести онлайн-опрос
Online-Umfrage erstellen
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.