Safari кодирует уже закодированный URL по запросу - PullRequest
4 голосов
/ 08 июля 2010

Я выполняю HTTP-запрос GET для страницы, используя следующий URL-адрес в Safari:
mysite.com/page.aspx?param=v%e5r
Страница содержит форму, которая отправляет обратно к себе. Тег HTML-формы выглядит следующим образом при выводе asp.net:
<form method="post" action="page.aspx?param=v%u00e5r" id="aspnetForm" >

Когда Safari отправляет это обратно, он каким-то образом преобразует этот URL в:
page.aspx?param=v%25u00e5r, то есть он URL кодирует уже закодированную строку URL, которая затем кодируется дважды, и выходные данные, генерируемые этим параметром, искажаются (v&#229;r). Я могу обойти это в некоторых местах путем URL-декодирования параметра перед его печатью.

Firefox и даже IE8 справляются с этим нормально. Это ошибка в WebKit или я что-то не так делаю?

Подведем итог:

ПОЛУЧИТЬ mysite.com/page.aspx?param=v%e5r
HTML: <form method="post" action="page.aspx?param=v%u00e5r" id="aspnetForm" > POST mysite.com/page.aspx?param=v%25u00e5r
HTML: <form method="post" action="page.aspx?param=v%25u00e5r" id="aspnetForm" >

1 Ответ

2 голосов
/ 08 июля 2010
mysite.com/page.aspx?param=v%e5r

Хотя вы можете использовать кодировку, отличную от UTF-8, в части запроса URL-адреса, это нецелесообразно и, как правило, приводит в замешательство множество сценариев, предполагающих использование UTF-8.1005 * Вы действительно хотите создавать формы на страницах, помеченных как UTF-8, затем принимать UTF-8 в своем приложении и кодировать строку vår (предполагая, что вы это имеете в виду) как param=v%C3%A5r.

page.aspx?param=v%u00e5r

О, дорогой!Это очень неправильно.%uXXXX является только последовательностью в стиле JavaScript- escape();это совершенно неверно, чтобы вставить URL.Safari, вероятно, пытается исправить ошибку, кодируя %, за которым не следует двухзначная шестнадцатеричная последовательность с %25.

. Генерирует ли это ASP.NET?Если это так, это очень разочаровывает.Как вы создаете тег <form>?Если вы кодируете параметр вручную, возможно, вам нужно указать аргумент Encoding до HttpUtility.UrlEncode?то есть.Encoding.UTF8 или, если вам действительно нужно иметь v%e5r, new Encoding(1252) (кодовая страница Windows 1252, западноевропейский).

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