Инструмент кодирования/декодирования 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(), чтобы убедиться, что все специальные символы правильно закодированы.