Лучший способ:
encodeURIComponent экранирует все символы, кроме следующих: alphabetic, decimal digits, - _ . ! ~ * ' ( )
Чтобы избежать непредвиденных запросов к серверу, вы должны вызвать encodeURIComponent для любого пользователяпараметры, которые будут переданы как часть URI.Например, пользователь может ввести «Thyme & time = again» для комментария к переменной.Если вы не используете encodeURIComponent для этой переменной, вы получите комментарий = Thyme% 20 & time = снова.Обратите внимание, что амперсанд и знак равенства обозначают новую пару ключ и значение.Таким образом, вместо того, чтобы иметь ключ комментария POST, равный «Thyme & time = again», у вас есть два ключа POST, один, равный «Thyme», а другой (time), равный снова.
Для application / x-www-form-urlencoded (POST), для http://www.w3.org/TR/html401/interac...m-content-type, пробелы должны быть заменены на '+', поэтому можно захотеть следовать за заменой encodeURIComponent с дополнительной заменой "% 20" на "+".
Если кто-то хочет быть более строгим в соблюдении RFC 3986 (который резервирует!, ', (,) И *), даже если эти символы не имеют формализованного использования с разделителями URI, можно безопасно использовать следующее:
function fixedEncodeURIComponent (str) {
return encodeURIComponent(str).replace(/[!'()]/g, escape).replace(/\*/g, "%2A");
}