Руководство Javascript URL Encoding
1. Javascript URL Encoding
В статье про "HTML URL Encoding" я объяснил почему вам нужно кодировать (encode) URL, и таблицу символов и их кодированные значения.
В данной статье я покажу вам как кодировать (encode), и декодировать (decode) URL с Javascript.
Начнем с вопроса "Как кодировать (encode) URL с Javascript?".
На самом деле это зависит от того, что вы хотите сделать. Javascript предоставляет вам 2 функции это encodeURI() и encodeURIComponent(). Разница между 2-мя этими функциями это какие символы будут ими кодированы.
- Функция encodeURI() кодирует все символы за исключением ~!@#$&*()=:/,;?+
- Функция encodeURIComponent() кодирует все символы за исключением -_.!~*'()
Поэтому фукнция encodeURI() подходит, если вы хотите кодировать весь URL, потому что такие части как ( http:// ) не будут кодированы. Используйте функцию encodeURIComponent(), если вы хотите кодировать значение параметра.
Если вы используете функцию encodeURIComponent() для кодирования всего URL вы получите нежелаемый результат.
encodeURI("http://example.com/ hey!/")
// http://example.com/%20hey!/
encodeURIComponent("http://www.example.com/ hey!")
// http%3A%2F%2Fexample.com%2F%20hey!%2F
var set1 = ";,/?:@&=+$#"; // Reserved Characters
var set2 = "-_.!~*'()"; // Unreserved Marks
var set3 = "ABC abc 123"; // Alphanumeric Characters + Space
console.log(encodeURI(set1)); // ;,/?:@&=+$#
console.log(encodeURI(set2)); // -_.!~*'()
console.log(encodeURI(set3)); // ABC%20abc%20123 (the space gets encoded as %20)
console.log(encodeURIComponent(set1)); // %3B%2C%2F%3F%3A%40%26%3D%2B%24%23
console.log(encodeURIComponent(set2)); // -_.!~*'()
console.log(encodeURIComponent(set3)); // ABC%20abc%20123 (the space gets encoded as %20)
Чтобы декодировать (decode) Javascript предоставляет вам 2 функции decodeURI() и decodeURIComponent().Случаи их использования схожи с 2-мя функциями encodeURI() и encodeURLComponent().
2. encodeURI(), decodeURI()
encodeURI(uri)
Функция encodeURI(uri) возвращает строку (string), это результат кодирования (encode) параметра uri.
Функция encodeURI() кодирует (encode) все символы. за исключением символов ниже:
A-Z a-z 0-9 ; , / ? : @ & = + $ - _ . ! ~ * ' ( ) #
Функция encodeURI(uri) используется если вы хотите кодировать весь URL или часть URL.
encodeURI-example.html
<!DOCTYPE html>
<html>
<head>
<title>encodeURI()</title>
<meta charset="UTF-8">
<style>input {margin: 10px 0px;}</style>
<script>
function doEncodeURI() {
var uri = document.getElementById('my-input').value;
var encodedUri = encodeURI(uri);
document.getElementById('my-output').value = encodedUri;
}
</script>
</head>
<body>
<h3>encodeURI()</h3>
Enter URL:
<input type="text" id="my-input" style="width:100%;"
value="http://example.com/my search?value=tom and jerry&maxResults=10"/>
<button onclick="doEncodeURI()">encodeURI()</button>
<input type="text" id="my-output" style="width:100%;" disabled/>
</body>
</html>
Пример использования функции decodeURI():
decodeURI-example.js
var uri = "http://example.com/my search?value=tom and jerry&maxResults=10";
// ==> http://example.com/my%20search?value=tom%20and%20jerry&maxResults=10
var encodedUri = encodeURI(uri);
console.log(encodeUri);
// ==> http://example.com/my search?value=tom and jerry&maxResults=10
var uri2 = decodeURI(encodedUri);
console.log(uri2);
3. encodeURIComponent(), decodeURIComponent()
encodeURIComponent(uri)
Функция encodeURIComponent(uri) возвращает строку (string), это результат кодирования (encode) параметра uri.
Функция encodeURIComponent() кодирует (encode) все символы, за исключением символов ниже:
A-Z a-z 0-9 - _ . ! ~ * ' ( )
Функция encodeURIComponent(uri) обычно используется для кодирования (encode) значения параметра URL.
encodeURIComponent-example.html
<!DOCTYPE html>
<html>
<head>
<title>encodeURIComponent()</title>
<meta charset="UTF-8">
<style>input {margin: 10px 0px;}</style>
<script>
function doEncodeURI() {
var searchText = document.getElementById('my-input').value;
var encodedSearchText = encodeURIComponent(searchText);
var url = "http://example.com/search?searchText=" + encodedSearchText;
document.getElementById('my-output').value = url;
}
</script>
</head>
<body>
<h3>encodeURIComponent()</h3>
Enter Search Text:
<input type="text" id="my-input" style="width:100%;"
value="someone@gmail.com"/>
<button onclick="doEncodeURI()">Encode</button>
<input type="text" id="my-output" style="width:100%;" disabled/>
</body>
</html>
Пример использования функции decodeURIComponent():
decodeURIComponent-example.js
var searchText = "someone@gmail.com";
// ==> someone%40gmail.com
var encodedSearchText = encodeURIComponent(searchText);
console.log(encodedSearchText);
// ==> someone@gmail.com
var text2 = decodeURIComponent(encodedSearchText);
console.log(text2);
4. Encode all characters?
Обе функции encodeURI() и encodeURIComponent() не кодируют все символы. И Javascript так же не имеет другую функцию для этой поддержки, поэтому если вы хотите, вам нужно написать свою собственную функцию.
encodeURIAll.js
function encodeURIAll(text) {
return encodeURIComponent(text).replace(/[!'()~*]/g, (c) => {
return '%' + c.charCodeAt(0).toString(16);
});
}
encodeURIAll-example.html
<!DOCTYPE html>
<html>
<head>
<title>Encode All Characters</title>
<meta charset="UTF-8">
<style>input {margin: 10px 0px;}</style>
<script src="encodeURIAll.js"></script>
<script>
function doEncodeURI() {
var text = document.getElementById('my-input').value;
var encodedUri = encodeURIAll(text);
console.log(encodedUri)
document.getElementById('my-output').value = encodedUri;
}
</script>
</head>
<body>
<h3>Encode All Characters</h3>
Enter Text:
<input type="text" id="my-input" style="width:100%;"
value="abc_.!~*'()"/>
<button onclick="doEncodeURI()">Encode</button>
<input type="text" id="my-output" style="width:100%;" disabled/>
</body>
</html>
Pуководства ECMAScript, Javascript
- Введение в Javascript и ECMAScript
- Быстрый старт с Javascript
- Диалоговое окно Alert, Confirm, Prompt в Javascript
- Быстрый запуск с JavaScript
- Переменные (Variable) в JavaScript
- Битовые операции
- Массивы (Array) в JavaScript
- Циклы в JavaScript
- Руководство JavaScript Function
- Руководство JavaScript Number
- Руководство JavaScript Boolean
- Руководство JavaScript String
- Заявление if/else в JavaScript
- Заявление Switch в JavaScript
- Обработка ошибок в JavaScript
- Руководство JavaScript Date
- Руководство JavaScript Module
- Функция setTimeout и setInterval в JavaScript
- Руководство Javascript Form Validation
- Руководство JavaScript Web Cookie
- Ключевое слово void в JavaScript
- Классы и объекты в JavaScript
- Техника симулирования класса и наследственности в JavaScript
- Наследование и полиморфизм в JavaScript
- Понимание Duck Typing в JavaScript
- Руководство JavaScript Symbol
- Руководство JavaScript Set Collection
- Руководство JavaScript Map Collection
- Понимание JavaScript Iterable и Iterator
- Руководство Регулярное выражение JavaScript
- Руководство JavaScript Promise, Async Await
- Руководство Javascript Window
- Руководство Javascript Console
- Руководство Javascript Screen
- Руководство Javascript Navigator
- Руководство Javascript Geolocation API
- Руководство Javascript Location
- Руководство Javascript History API
- Руководство Javascript Statusbar
- Руководство Javascript Locationbar
- Руководство Javascript Scrollbars
- Руководство Javascript Menubar
- Руководство JavaScript JSON
- Обработка событий в Javascript
- Руководство Javascript MouseEvent
- Руководство Javascript WheelEvent
- Руководство Javascript KeyboardEvent
- Руководство Javascript FocusEvent
- Руководство Javascript InputEvent
- Руководство Javascript ChangeEvent
- Руководство Javascript DragEvent
- Руководство Javascript HashChangeEvent
- Руководство Javascript URL Encoding
- Руководство Javascript FileReader
- Руководство Javascript XMLHttpRequest
- Руководство Javascript Fetch API
- Разбор XML в Javascript с помощью DOMParser
- Введение в Javascript HTML5 Canvas API
- Выделение кода с помощью библиотеки Javascript SyntaxHighlighter
Show More