Как кодировать URL с символами ударения в Javascript? - PullRequest
1 голос
/ 14 марта 2011

У меня странная проблема с IE с URL-адресом, когда я передаю сценарий в URL-адресе, он не работает и, похоже, отлично работает для других браузеров.

В IE URL выглядит так:

... / search.aspx? Ключевое слово = СБН% c3% 83% c2% a9nario

В FireFox URL выглядит как:

... / search.aspx? Ключевое слово = СБН% C3% A9nario

В IE разрывы URL-адресов и Firefox работают нормально, нужно ли выполнять декодирование URL-адресов, чтобы позаботиться об этом в IE?

1 Ответ

3 голосов
/ 06 сентября 2011

Хотя вы не сказали, как «пропустили» строку, я могу рассказать вам, что произошло.

Символ é имеет кодовую точку E9. В UTF-8 это кодируется как два байта: C3 A9. Таким образом, правильный способ показать "scénario" в URL-адресе -

sc%C3%A9nario

Теперь, что произойдет, если вы возьмете эту строку и посмотрите на каждый отдельный байт и предположите, что они являются символами, и сделали кодировку UTF-8 во второй раз ? Что случилось бы это

  • с -> с
  • с -> с
  • % C3 будет интерпретироваться как символ с кодовой точкой C3, а именно Ã, который в UTF-8 равен C3 83.
  • % A9 будет интерпретироваться как символ с кодовой точкой A9, а именно ©, который в UTF-8 является C2 A9.
  • n -> n

Это в точности соответствует тому, что вы видели в IE.

Теперь я не могу точно сказать, как это произошло, потому что в вопросе не было достаточного фона, но ясно, что каким-то образом строка «scénario» была закодирована в строку байтов UTF-8 затем он был закодирован снова на основании странного предположения, что первая кодировка вызвала строку символов в кодировке Windows-1252 или Latin-1.

Вам нужно посмотреть, как ваша строка "кодировалась дважды".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...