побег()
Не используйте это!
escape()
определено в разделе В.2.1.2 побег, а во вводном тексте Приложения В говорится:
... Все языковые функции и поведения, указанные в этом приложении, имеют одну или несколько нежелательных характеристик, и при отсутствии устаревшего использования они будут удалены из этой спецификации. ...
... Программисты не должны использовать или предполагать существование этих функций и поведения при написании нового кода ECMAScript ....
Поведение:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/escape
Специальные символы кодируются за исключением: @ * _ + -. /
Форма шестнадцатеричное для персонажей, чей код блока значение 0xFF или менее, представляет собой последовательность выхода из двух цифр: %xx
.
Для символов с большей кодовой единицей используется четырехзначный формат %uxxxx
. Это не разрешено в строке запроса (как определено в RFC3986 ):
query = *( pchar / "/" / "?" )
pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
pct-encoded = "%" HEXDIG HEXDIG
sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
/ "*" / "+" / "," / ";" / "="
Знак процента разрешен только в том случае, если за ним сразу следуют две шестнадцатеричные цифры, а после процента u
не допускается.
encodeURI ()
Используйте encodeURI, когда вы хотите рабочий URL. Сделайте этот звонок:
encodeURI("http://www.example.org/a file with spaces.html")
получить:
http://www.example.org/a%20file%20with%20spaces.html
Не вызывайте encodeURIComponent, поскольку он уничтожит URL и вернет
http%3A%2F%2Fwww.example.org%2Fa%20file%20with%20spaces.html
encodeURIComponent ()
Используйте encodeURIComponent, когда вы хотите закодировать значение параметра URL.
var p1 = encodeURIComponent("http://example.org/?a=12&b=55")
Затем вы можете создать нужный вам URL:
var url = "http://example.net/?param1=" + p1 + "¶m2=99";
И вы получите этот полный URL:
http://example.net/?param1=http%3A%2F%2Fexample.org%2F%Ffa%3D12%26b%3D55¶m2=99
Обратите внимание, что encodeURIComponent не экранирует '
символ. Распространенной ошибкой является использование ее для создания атрибутов html, таких как href='MyUrl'
, что может привести к ошибке внедрения. Если вы строите html из строк, либо используйте "
вместо '
кавычек атрибутов, либо добавьте дополнительный уровень кодирования ( '
можно кодировать как% 27).
Для получения дополнительной информации об этом типе кодировки вы можете проверить: http://en.wikipedia.org/wiki/Percent-encoding
encodeURIComponent("var1=value1&var2=value2")
это не типичный вариант использования. Этот пример закодирует=
и&
, что, вероятно, не то, что было задумано!encodeURIComponent
обычно применяется отдельно только к значению в каждой паре ключ-значение (часть после каждого=
).