Некоторая проблема с кодированием переменной $ _GET из адресной строки

Мой проект основан на CodeIgniter, но я думаю, этот вопрос совсем не об этом.

Во-первых, я включил строки запроса и функцию поиска. Строка поиска передается в переменную searchterm, и когда я передаю ее через форму, она работает нормально и выглядит так:

http: // локальный / домашний / поиск /? searchterm = testtesttest

Хорошо, теперь, когда я ввожу какую-то кириллическую строку в форму поиска, она тоже работает нормально, например, URI:

http: // local / home / search /? searchterm = привет (в Chrome) или http: // local / home / search /? searchterm = ������ (в IE, Opera и т. д.)

Два вышеуказанных случая работают нормально, НО КОГДА я ввожу строку поиска CYRILLIC прямо из адресной строки (например, в Opera или IE), она не хочет ничего искать. $ _GET [‘searchterm’] пуст, а что касается QUERY_STRING, это что-то вроде searchterm = ������ (все данные из профилировщика).

Я кодирую свою строку с контроллера, но она почему-то не работает. Я также пробовал несколько случаев iconv () из того, что я искал в Google, но они также не работали.

Возникает вопрос, почему все остальные браузеры, кроме Chrome, не извлекают переменную CYRILLIC $ _GET из адресной строки, если она была введена оттуда? При прохождении формы все работает нормально.

Заранее спасибо, ребята. Надеюсь на вашу помощь.

P.S. Я также нашел:

%D0%BD%D0%BE%D1%87%D0%B0%D0%BB%D0%BE

  • это передается из формы, для параметра accept-charset установлено значение UTF-8. В этом случае, как я уже сказал, все работает нормально. А также:

%ED%E0%F7%E0%EB%EE

  • это появляется в адресной строке при вводе строки непосредственно в адресной строке. Так что, наверное, каждый браузер меняет мои кириллические символы на что-то странное ... Не знаю :(

Не забывайте, что с Chrome все работает нормально! Возможно, это потому, что по умолчанию этот браузер не кодирует кириллические символы неправильно, как другие браузеры.


person vadimyer    schedule 02.07.2011    source источник
comment
почему бы не упростить себе жизнь в десять раз и просто использовать почту вместо того, чтобы получать?   -  person Peter    schedule 04.07.2011


Ответы (1)


Я предполагаю, что часть проблемы здесь заключается в том, что вы используете символы UTF-8 в URL-адресе ... Вы можете настроить PHP для использования UTF-8 по умолчанию из файла php.ini или добавив ini_set('default_charset', 'UTF-8'); где-нибудь в вашем приложении , (Я добавляю его в корневой файл index.php в CodeIgniter, если не могу изменить файл .ini).

Я быстро протестировал японский и ваш пример в Firefox и Safari, и оба они отображали правильные строки. Дополнительную информацию о настройке Apache / PHP для UTF-8 можно найти в этом отличном руководстве..

person beseku    schedule 06.07.2011