Инструмент кодирования/декодирования URL
Часто задаваемые вопросы
Что такое URL кодирование?
URL кодирование — это метод преобразования символов в формат, который может быть передан через Интернет. URL могут быть отправлены через Интернет только с использованием набора символов ASCII. Поскольку URL часто содержат символы за пределами набора ASCII, их необходимо преобразовывать. URL кодирование заменяет небезопасные ASCII символы на '%', за которым следуют две шестнадцатеричные цифры.
Как работает URL кодирование?
URL кодирование работает путем замены небезопасных символов на '%', за которым следуют две шестнадцатеричные цифры, представляющие UTF-8 кодировку символа. Например, символ пробела кодируется как %20. URL не могут содержать пробелы, поэтому они заменяются либо знаком плюс (+), либо %20. Другие специальные символы заменяются соответствующими кодами %xx.
Распространенные символы, требующие URL кодирования
Следующие символы требуют URL кодирования при использовании в URL:
Символ | URL-кодировка | Описание |
---|---|---|
Space | %20 | Наиболее часто кодируемый символ |
! | %21 | Восклицательный знак |
" | %22 | Двойная кавычка |
# | %23 | Символ решетки (используется для фрагментов URL) |
$ | %24 | Знак доллара |
% | %25 | Знак процента (escape-символ URL кодирования) |
& | %26 | Амперсанд (используется для разделения параметров URL) |
' | %27 | Одинарная кавычка |
( | %28 | Открывающая скобка |
) | %29 | Закрывающая скобка |
+ | %2B | Знак плюс |
, | %2C | Запятая |
/ | %2F | Прямая косая черта (разделитель пути URL) |
= | %3D | Знак равенства (назначение параметра URL) |
? | %3F | Вопросительный знак (начало строки запроса URL) |
Реализация URL кодирования в разных языках программирования
Вот примеры URL кодирования и декодирования на различных языках программирования:
Go
package main
import (
"fmt"
"net/url"
)
func main() {
// Encode a URL
text := "Hello World! Special chars: &?=/";
encoded := url.QueryEscape(text)
fmt.Println("Encoded:", encoded)
// Decode a URL
decoded, err := url.QueryUnescape(encoded)
if err == nil {
fmt.Println("Decoded:", decoded)
}
}
C
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
// Function to URL-encode a string
char *url_encode(char *str) {
char *encoded = malloc(strlen(str) * 3 + 1);
char *pstr = str;
char *pbuf = encoded;
while (*pstr) {
if (isalnum(*pstr) || *pstr == '-' || *pstr == '_' || *pstr == '.' || *pstr == '~') {
*pbuf++ = *pstr;
} else if (*pstr == ' ') {
*pbuf++ = '+';
} else {
sprintf(pbuf, "%%%.2X", *pstr);
pbuf += 3;
}
pstr++;
}
*pbuf = '\\0';
return encoded;
}
int main() {
char *text = "Hello World! Special chars: &?=/";
char *encoded = url_encode(text);
printf("Original: %s\\n", text);
printf("Encoded: %s\\n", encoded);
free(encoded);
return 0;
}
PHP
<?php
// URL encoding
$text = "Hello World! Special chars: &?=/";
$encoded = urlencode($text);
echo "Encoded: " . $encoded . "\\n";
// URL decoding
$decoded = urldecode($encoded);
echo "Decoded: " . $decoded . "\\n";
?>
Python
import urllib.parse
# URL encoding
text = "Hello World! Special chars: &?=/"
encoded = urllib.parse.quote(text)
print(f"Encoded: {encoded}")
# URL decoding
decoded = urllib.parse.unquote(encoded)
print(f"Decoded: {decoded}")
JavaScript
// URL encoding
const text = "Hello World! Special chars: &?=/";
const encoded = encodeURIComponent(text);
console.log("Encoded:", encoded);
// URL decoding
const decoded = decodeURIComponent(encoded);
console.log("Decoded:", decoded);
TypeScript
// URL encoding
const text: string = "Hello World! Special chars: &?=/";
const encoded: string = encodeURIComponent(text);
console.log("Encoded:", encoded);
// URL decoding
const decoded: string = decodeURIComponent(encoded);
console.log("Decoded:", decoded);
В чем разница между encodeURI и encodeURIComponent?
Функция encodeURI() предназначена для кодирования полного URI, поэтому она не кодирует символы, имеющие особое значение в URL, такие как /, ?, :, @, &, =, +, $ и #. В отличие от этого, encodeURIComponent() кодирует все специальные символы, что делает ее подходящей для кодирования частей URL, таких как параметры запроса. При кодировании параметров запроса всегда используйте encodeURIComponent(), чтобы убедиться, что все специальные символы правильно закодированы.