JavaScript: Сравнение JavaScript методов escape(), encodeURI(), и encodeURIComponent()
Метод escape()
Определен в JavaScript 1.0
MSDN JScriptМетод escape() возвращает строку (в формате Unicode) . Все пробелы, пунктуация и любые не-ASCII символы в ней закодированы и выглядят как %xx, где xx эквивалентно шестнадцатиричному числу, обозначающему символ. Например, пробелы будут возвращены как "%20".
Символы, числовые значения которых больше 255 будут представлены в формате %uxxxx.
Функции escape и unescape дают возможность кодировать и декодировать строки. Функция escape возвращает шестнадцатиричное представление аргумента в кодировке ISO Latin. Функция unescape возвращает ASCII строку из шестнадцатиричной кодировки символов.
MSDN JScript
MSDN JScriptМетод escape() возвращает строку (в формате Unicode) . Все пробелы, пунктуация и любые не-ASCII символы в ней закодированы и выглядят как %xx, где xx эквивалентно шестнадцатиричному числу, обозначающему символ. Например, пробелы будут возвращены как "%20".
Символы, числовые значения которых больше 255 будут представлены в формате %uxxxx.
Mozilla Developer Core Javascript Guide
Функции escape и unescape дают возможность кодировать и декодировать строки. Функция escape возвращает шестнадцатиричное представление аргумента в кодировке ISO Latin. Функция unescape возвращает ASCII строку из шестнадцатиричной кодировки символов.
Метод encodeURI()
Определен в JavaScript 1.5
Метод encodeURI() возвращает закодированный URI. Если к результату применить метод decodeURI, будет возвращена исходная строка. Метод encodeURI() не кодирует следущие символы: ":", "/", ";" и "?".
Для того, чтобы закодировать эти символы, следует использовать encodeURIComponent.
Кодирует Uniform Resource Identifier (URI), замещая некоторые символы escape-последовательностями, представляющими эти символы в кодировке UTF-8.
MSDN JScript
Метод encodeURI() возвращает закодированный URI. Если к результату применить метод decodeURI, будет возвращена исходная строка. Метод encodeURI() не кодирует следущие символы: ":", "/", ";" и "?".
Для того, чтобы закодировать эти символы, следует использовать encodeURIComponent.
Mozilla Developer Core Javascript Guide
Кодирует Uniform Resource Identifier (URI), замещая некоторые символы escape-последовательностями, представляющими эти символы в кодировке UTF-8.
Метод encodeURIComponent()
Определен в JavaScript 1.5
Метод encodeURIComponent() возвращает закодированный URI. Если к результату применить метод decodeURIComponent, будет возвращена исходная строка. Метод encodeURIComponent кодирует все символы, поэтому будьте внимательны, если строка представляет путь к файлу: /folder1/folder2/default.html. Слэши будут закодированы и не пригодны к отправке веб-серверу в качестве запроса. Следует использовать метод encodeURI если строка содержит более одного компонента URI.
Кодирует компоненты Uniform Resource Identifier (URI), замещая некоторые символы escape-последовательностями, представляющими эти символы в кодировке UTF-8.
MSDN JScript
Метод encodeURIComponent() возвращает закодированный URI. Если к результату применить метод decodeURIComponent, будет возвращена исходная строка. Метод encodeURIComponent кодирует все символы, поэтому будьте внимательны, если строка представляет путь к файлу: /folder1/folder2/default.html. Слэши будут закодированы и не пригодны к отправке веб-серверу в качестве запроса. Следует использовать метод encodeURI если строка содержит более одного компонента URI.
Mozilla Developer Core Javascript Guide
Кодирует компоненты Uniform Resource Identifier (URI), замещая некоторые символы escape-последовательностями, представляющими эти символы в кодировке UTF-8.
Подводя итог
Что и в каком случае использовать?Метод escape() не кодирует символ "+", который может быть принят как пробел на стороне сервера и его можно использовать для передачи пробелов в полях форм. Соответственно, чтобы обойти этот дефект, лучше не использовать escape() когда это возможно. В качестве альтернативы лучше использовать encodeURIComponent().
escape() не кодирует символы: @*/+.
Использование метода encodeURI() лучше чем escape() приспособлено для кодирования всего URI, а не запроса, являющегося частью URL. Этот метод следует использовать в случае, когда надо закодировать URI полностью для отправки запроса веб-серверу, при этом некоторые символы не нужно кодировать.
encodeURI() не кодирует символы: !@#$&*()=:/;?+'.
Метод encodeURIComponent() лучше использовать для кодирования отдельных частей (компонентов) URI. Им кодируются все символы, которые могут являться спецсимволами URI, например, символ слэша "/".
encodeURIComponent() не кодирует символы: !*()'.