Втеча()
Не використовуйте його!
escape()
визначено в розділі B.2.1.2 аварійного виклику, а вступний текст Додатку B говорить:
... Усі мовні особливості та поведінка, зазначені в цьому додатку, мають одну або декілька небажаних характеристик, і за відсутності застарілого використання буде вилучено з цієї специфікації. ...
... Програмісти не повинні використовувати або припускати існування цих особливостей і поведінки під час написання нового коду 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
зазвичай застосовується окремо до просто значення у кожній парі значень ключів (частина після кожної=
).