Мета-обновление с точкой с запятой - PullRequest
2 голосов
/ 26 февраля 2011

У меня точка с запятой в качестве разделителя строки запроса в моих URL-адресах вместо и (&).
Моя проблема заключается в том, что когда я пытаюсь выполнить мета-обновление до URL-адреса с точкой с запятой в строке запроса, он переводит его в% 253bвместо.Поэтому при пересылке я не могу прочитать параметры строки запроса, поскольку разделителя больше нет.пример:

http://domain.com/?foo=1;bar=2  

становится:

http://domain.com?foo=1%253bbar=2  

Как я могу решить эту проблему, чтобы она не переводила точку с запятой при выполнении мета-обновления?

Благодарен залюбая помощь!

Ответы [ 3 ]

2 голосов
/ 14 сентября 2011

Проблема в том, что строка запроса кодируется дважды , когда ее вообще не нужно кодировать. Вероятно, это связано с тем, что код, который кодирует и декодирует строку запроса (о которой вы не упомянули), ожидает традиционного амперсандного (&) разделителя строк запроса и может свободно кодировать все остальное.

Оригинал: foo=1;bar=2

1-е кодирование (точка с запятой →% 3B): foo=1%3bbar=2

2-я кодировка (процент →% 25): foo=1%253bbar=2

2 голосов
/ 26 февраля 2011

UPDATE

Как указано в комментариях, ; является допустимым символом для URL, который зарезервирован для цели, не указанной в RFC . Как указывает Данортон в своем собственном ответе, проблема заключается в двойной кодировке URL.

Как таковое, невозможно предоставить решение без дополнительной информации об окружающей среде и точной ситуации, когда возникает проблема.

Однако, как указано в моем предыдущем неправильном ответе, я остаюсь на своей позиции в отношении использования & в качестве разделителя. По моему мнению, использование чего-то другого вызывает проблемы.

мой "неправильный" ответ

Я не думаю; является допустимым символом для URL, поэтому мне кажется нормальным, что он закодирован. Есть причина и используется, почему вы хотите изменить это?

Выполнение чего-то подобного вызывает проблемы. Уже довольно сложно заставить работать все комбинации браузеров и операционных систем, почему все еще сложнее?

Если вы хотите придерживаться этого и используете PHP, взгляните на urlencode () и parse-url ()

1 голос
/ 08 марта 2013

Использование одинарных кавычек для URL решит проблему.

<meta http-equiv="refresh" content="0;URL='http://domain.com/?foo=1;bar=2'">   

Большинство браузеров (Firefox, Chrome, Safari, Opera), вероятно, перенаправляют на полный URL-адрес без кавычек, но Internet Explorer (также IE10) отбрасывает часть после второй точки с запятой без одинарных кавычек.


Синтаксис Uri RFC3986

W3C-рекомендация

...