Браузер экранирует некоторые недействительные символы URL, но не другие при настройке document.location - PullRequest
2 голосов
/ 18 ноября 2011

(Пожалуйста, не читайте лекций о том, как это неправильный способ создания URL-адресов и т. Д. Это устаревший код, и мне нужно больше ловить рыбу. Я просто хочу знать, что браузер думает, что это делает.)

С учетом следующей функции:

function redirectToSearch(baseURL) {
    var searchString = document.getElementById("searchBox").value;
    document.location = baseURL + "&searchString=" + searchString;
}

где элемент searchBox является текстовым полем: если вы введете что-то вроде

{ a ^ b } " c | d "

в текстовом поле и вызов этой функции, результирующий URL-адрес, как перенаправлено, заканчивается на

searchString={%20a%20^%20b%20}%20%22c%20|%20d%22

- пробелы и кавычки экранированы, но ничего больше, хотя {, } и | также должны быть недопустимыми символами. Это похоже на правду в Chrome, Firefox и IE.

Хорошо, вероятно, я могу исправить это, кодируя строку самостоятельно, но я хочу знать, почему только пробелы и кавычки (и, возможно, другие символы, которые я не обнаружил)? Почему не все недопустимые символы или нет?

Ответы [ 2 ]

0 голосов
/ 18 ноября 2011

Вы получаете ошибку?Ты не должен.Браузеры ведут себя по-разному и делают некоторые кодировки для вас, чтобы облегчить чтение.Однако, как вы уже заметили, вы должны самостоятельно кодировать каждый компонент (имя и значение), используя encodeURIComponent() ... То, что браузер пытается исправить ваши ошибки, не означает, что вы должны их совершать ...

0 голосов
/ 18 ноября 2011

Это потому, что они могут быть специальными символами в самом URL, тогда как пробелы и другие упомянутые вами элементы не имеют особого значения в URL. Так как он знает, что вы задаете URL (учитывая, что location является URL), он превращает его в URL наилучшим образом.

И, конечно, вы можете решить эту проблему, используя encodeURIComponent.

...