От чего зависит, url-кодируется ли кириллица в GET'e?

Asar
На сайте с 23.08.2004
Offline
330
867

Получается, вводим в форме кириллицу, кодирования не происодит, все Ок. Потом, к примеру, переходим на вторую страницу каталога с адресом /?p=щщщщ, поехало кодирование. Вопрос: можно (и стоит ли) как-нить это дело отрегулировать, чтобы всегда было без кодирования или все же только хардкор, только урл-кодирование для ради надежности/универсальности?

siv1987
На сайте с 02.04.2009
Offline
427
#1

Зависит от браузера. Опера не отображает закодированные символы в GET, файрфокс да. Кодировать следует всегда во избежание проблем с кодировкой.

SeVlad
На сайте с 03.11.2008
Offline
1609
#2
Делаю хорошие сайты хорошим людям. Предпочтение коммерческим направлениям. Связь со мной через http://wp.me/P3YHjQ-3.
Asar
На сайте с 23.08.2004
Offline
330
#3

В общем, используем везде urldecode и не пармимся, если я все правильно понял...

SeVlad
На сайте с 03.11.2008
Offline
1609
#4
Asar:
В общем, используем везде urldecode и не пармимся, если я все правильно понял...

Он сам будет "использоваться", если я правильно понял что ты имеешь ввиду.

Но я за транслит.

Asar
На сайте с 23.08.2004
Offline
330
#5

Нее... сам будет использоваться encode, а вот decode — это уж на усмотрение.

А транслит здесь не при чем. Я ж имею ввиду что-то вроде поисковой строки в ГЕТе, а не статику (для которой, впрочем, всегда имеется английский).

siv1987
На сайте с 02.04.2009
Offline
427
#6

urlencode. $_GET декодируется автоматически.

Asar
На сайте с 23.08.2004
Offline
330
#7

Весь сыр-бор начался с того, что не декодировался он, в явном виде шел. И сейчас идет... Ну, или мы о разном говорим.

Пример: ?p=%25D0%25B2%25D0%25BE%25D1%2581

В таком случае у меня $_GET['p'] будет равен именно %25D0%25B2%25D0%25BE%25D1%2581

А вот urldecode($_GET['p']) будет равен "вос".

siv1987
На сайте с 02.04.2009
Offline
427
#8
Asar:
Пример: ?p=%25D0%25B2%25D0%25BE%25D1%2581
В таком случае у меня $_GET['p'] будет равен именно %25D0%25B2%25D0%25BE%25D1%2581

В этом примере двойная кодировка. В таком виде $_GET['p'] будет равен %D0%B2%D0%BE%D1%81, и уже после второго декодирования становится "вос". Если бы он был равен именно этому, чтобы декодировать строку пришлось два раза выполнять urldecode. %25 это код %. Если у вас такая строка, значит вы каким-то образом два раза кодируете. Еще раз обратите внимание на мое сообщение выше. Разные браузеры интерпретирует по разному кодированную строку в GET параметрах, возможно то что вы видите обычную строку не значит что она не закодирована. Смотрите url в исходном коде.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий