none
значение get-параметров русские символы в IE - слетает кодировка RRS feed

  • Вопрос

  • Добрый день!

     Наткнулся на очень неприятный момент!

    При попытке передачи значений get-параметров на русском языке (http://site1.ru/home/index?t=значение1) через IE - сервер не может прочитать их нормально.

    В остальных браузерах такого бага не замечено.

    Куда вообще копать?

    Заранее спасибо!

    12 августа 2015 г. 11:36

Ответы

  • Опишите как вы их передаете и как именно кодируйте? Если вы пытайтесь руками набирать не ASCII символы в адресной строке бразузера то кодирование (или нет) на усмотрение бразузера и работать в общем случае не будет.

    Поэтому символы всегда должны кодироваться по стандарту и в нужной вам кодировке (рекомендую UTF-8).

    Примеры:

    Неправильно:

    ?абв

    Правильно:

    ?%D0%B0%D0%B1%D0%B2

    Как видно символы в кодировке UTF-8 (двухбайтовые в данном случае), закодированы побайтово как предписывает стандарт.


    This posting is provided "AS IS" with no warranties, and confers no rights.

    • Помечено в качестве ответа Vladimir Rog 15 августа 2015 г. 5:19
    12 августа 2015 г. 15:58
    Модератор

Все ответы

  • Опишите как вы их передаете и как именно кодируйте? Если вы пытайтесь руками набирать не ASCII символы в адресной строке бразузера то кодирование (или нет) на усмотрение бразузера и работать в общем случае не будет.

    Поэтому символы всегда должны кодироваться по стандарту и в нужной вам кодировке (рекомендую UTF-8).

    Примеры:

    Неправильно:

    ?абв

    Правильно:

    ?%D0%B0%D0%B1%D0%B2

    Как видно символы в кодировке UTF-8 (двухбайтовые в данном случае), закодированы побайтово как предписывает стандарт.


    This posting is provided "AS IS" with no warranties, and confers no rights.

    • Помечено в качестве ответа Vladimir Rog 15 августа 2015 г. 5:19
    12 августа 2015 г. 15:58
    Модератор
  • День добрый!

    Т.е. обязательно только для IE перегонять в ASCII ?

    Может серверно поправить как-то есть возможность.

    Просто значение проставляют пользователи, это utm-метки.

    Сложно им будет рассказать, что нужно ASCII.

    Причем во всех остальных браузерах-то работает, как надо.

    А вот пример в википедии: http://prntscr.com/83uuv5

    Там же руками можно набрать - и урл будет читабелен, для человека без кодировки.

    12 августа 2015 г. 17:56
  • Обязательно для _любых_ браузеров, иначе нельзя сказать какая будет кодировка в каждом конкретном случае (разные платформы, разные настройки локали и т.п.).

    To что в некоторых случаях на некоторых платформах и браузерах оно работает - это вам просто повезло.

    И не в ASCII, a в UTF-8 (или, точнее, в ту кодировку с которой работает сервер и которая типично должна быть UTF-8) с последующим кодированием в форме %XX как предписывает стандарт. 

    Пользователи конечно не должны руками набирать URL. Должна быть форма куда вводятся данные, затем скрипт искейпит URL как надо и перенаправляет браузер.

    Так же рекомендую прочитать данную статью, а то вы что то все за ASCII принимайте (хотя ASCII практически уже не используется нигде):

    http://www.joelonsoftware.com/articles/Unicode.html


    This posting is provided "AS IS" with no warranties, and confers no rights.

    • Предложено в качестве ответа YatajgaEditor 13 августа 2015 г. 5:59
    12 августа 2015 г. 18:29
    Модератор
  • Спасибо большое за ответ!

    Кодировки ASCII, utf-8 - это все хорошо, когда есть такая форма как вы описали. Да и сделать ее несложно.

    Но! Есть такие пользователи, которые называются "специалисты по контекстной рекламе", которые значение utm-меток (эти самые гет параметры) привыкли набивать руками. И их в лицо ты не видел и не знаешь.  Как с такими быть?

    Мое видение следующее: т.к. серверных настроек я не нашел, которые могли бы помочь.

    Нужно проверять строку на входе: вычленять регуляркой символы не соответствующие [a-zA-Z] плюс  спецсимволы и вычлененные пробовать перегнать пока они будут соответствовать [а-яА-Я]+.

     Это первое что приходит в голову.

    13 августа 2015 г. 6:07
  • Да, можно так. Разрешенные символы есть в стандарте. Перегоднят ничего не надо, сразу возвращать ошибку.

    Или можно кодировать параметр, например в Base64.


    This posting is provided "AS IS" with no warranties, and confers no rights.

    13 августа 2015 г. 15:41
    Модератор
  • Еще один варант: проверяйте referrer. Если пустой то перенаправлять на страницу ввода.

    This posting is provided "AS IS" with no warranties, and confers no rights.

    13 августа 2015 г. 16:13
    Модератор