Некоторая проблема с кодированием переменной $ _GET из адресной строки - PullRequest
1 голос
/ 02 июля 2011

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

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

http: // local / home / search /? 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 () из того, что я гуглил, но они также не работали.

Итак, вопрос в том, почему все другие браузеры, кроме 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 все работает отлично! Возможно, это связано с тем, что по умолчанию этот браузер не кодирует символы кириллицы неправильно, как другие браузеры.

1 Ответ

0 голосов
/ 06 июля 2011

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

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

...