Whiz Tools

Энкодер URL-строк

Инструмент экранирования строк URL

Введение

В области веб-разработки и интернет-коммуникаций URL (Унифицированные Указатели Ресурсов) играют ключевую роль в идентификации ресурсов в сети. Однако у URL есть ограничения на символы, которые они могут содержать. Некоторые символы имеют специальное значение, в то время как другие небезопасны для использования в URL из-за возможности неправильной интерпретации или повреждения во время передачи.

Кодирование URL, также известное как процентное кодирование, является механизмом преобразования специальных символов в формат, который может быть передан через Интернет. Этот инструмент позволяет вам вводить строку URL и экранировать специальные символы, гарантируя, что URL действителен и может быть правильно интерпретирован веб-браузерами и серверами.

Понимание кодирования URL

Что такое кодирование URL?

Кодирование URL включает замену небезопасных ASCII символов на %, за которым следуют две шестнадцатеричные цифры, представляющие код ASCII символа. Это гарантирует, что информация передается по Интернету без изменений.

Например, символ пробела ' ' заменяется на %20.

Почему кодирование URL необходимо?

URL могут быть отправлены по Интернету только с использованием набора символов ASCII. Поскольку URL часто содержат символы за пределами этого набора, их необходимо преобразовать в действительный ASCII формат. Кодирование URL гарантирует, что специальные символы не вызовут непредвиденных эффектов или ошибок в веб-запросах.

Символы, которые нужно кодировать

Согласно спецификации RFC 3986, следующие символы зарезервированы в URL и должны быть процентно закодированы, если они используются буквально:

  • Общие разделители: :, /, ?, #, [, ], @
  • Подразделители: !, $, &, ', (, ), *, +, ,, ;, =

Кроме того, любые не ASCII символы, включая символы в Unicode, должны быть закодированы.

Как работает кодирование URL?

Процесс кодирования

  1. Идентификация специальных символов: Проанализируйте строку URL и определите символы, которые не являются не зарезервированными ASCII символами (буквы, цифры, -, ., _, ~).

  2. Преобразование в код ASCII: Для каждого специального символа получите его код ASCII или кодовую точку Unicode.

  3. Преобразование в байтовую последовательность UTF-8 (если необходимо): Для не ASCII символов закодируйте символ в один или несколько байтов, используя кодировку UTF-8.

  4. Преобразование в шестнадцатеричное: Преобразуйте каждый байт в его двузначный шестнадцатеричный эквивалент.

  5. Добавление символа процента: Предшествуйте каждому шестнадцатеричному байту символом %.

Пример кодирования

  • Символ: ' ' (Пробел)

    • Код ASCII: 32
    • Шестнадцатеричный: 20
    • Закодированный URL: %20
  • Символ: 'é'

    • Кодировка UTF-8: 0xC3 0xA9
    • Закодированный URL: %C3%A9

Учитываемые крайние случаи

  • Символы Unicode: Не ASCII символы должны быть закодированы в UTF-8, а затем процентно закодированы.

  • Уже закодированные символы процента: Символы процента, которые являются частью процентных кодов, не должны быть повторно закодированы.

  • Зарезервированные символы в строках запроса: Некоторые символы имеют специальное значение в строках запроса и должны быть закодированы, чтобы предотвратить изменение структуры.

Декодирование URL

Что такое декодирование URL?

Декодирование URL — это обратный процесс кодирования URL. Оно преобразует процентно закодированные символы обратно в их исходную форму, делая URL читаемым и интерпретируемым людьми и системами.

Процесс декодирования

  1. Идентификация последовательностей процентного кодирования: Найдите все символы %, за которыми следуют две шестнадцатеричные цифры в строке URL.

  2. Преобразование шестнадцатеричного в байты: Переведите каждое шестнадцатеричное значение в его соответствующий байт.

  3. Декодирование байтов UTF-8 (если необходимо): Для многобайтовых последовательностей объедините байты и декодируйте их с помощью кодировки UTF-8, чтобы получить исходный символ.

  4. Замена закодированных последовательностей: Замените процентно закодированные последовательности декодированными символами.

Пример декодирования

  • Закодированный: hello%20world

    • %20 переводится в пробел ' '
    • Декодированный: hello world
  • Закодированный: J%C3%BCrgen

    • %C3%A4 переводится в 'ü' в UTF-8
    • Декодированный: Jürgen

Важность декодирования URL

Декодирование URL необходимо при обработке пользовательского ввода из URL, чтении параметров запроса или интерпретации данных, полученных из веб-запросов. Оно гарантирует, что информация, извлеченная из URL, находится в правильной, предполагаемой форме.

Сценарии использования

Веб-разработка

  • Параметры запроса: Кодирование пользовательского ввода в параметрах запроса для предотвращения ошибок или уязвимостей безопасности.

  • Параметры пути: Безопасное включение динамических данных в пути URL.

Передача данных

  • API и веб-сервисы: Обеспечение правильного формата данных, отправляемых в API.

  • Интернационализация: Поддержка URL с символами различных языков.

Безопасность

  • Предотвращение атак внедрения: Кодирование вводов для снижения риска межсайтового скриптинга (XSS) и других атак внедрения.

Альтернативы

Хотя кодирование URL является важным, существуют сценарии, в которых другие методы кодирования могут быть более подходящими:

  • Кодирование Base64: Используется для кодирования двоичных данных внутри URL или когда требуется более высокая плотность информации.

  • Кодирование UTF-8 без процентного кодирования: Некоторые системы используют кодирование UTF-8 напрямую, но это может привести к проблемам, если не будет правильно обработано.

Учитывайте специфику вашего приложения, чтобы выбрать наиболее подходящий метод кодирования.

История

Кодирование URL было введено с ранними спецификациями стандартов URL и URI (Унифицированный Указатель Ресурсов) в 1990-х годах. Необходимость в последовательном способе кодирования специальных символов возникла из-за разнообразных систем и наборов символов, используемых по всему миру.

Ключевые события включают:

  • RFC 1738 (1994): Определил URL и ввел процентное кодирование.

  • RFC 3986 (2005): Обновил синтаксис URI, уточнив правила кодирования.

Со временем кодирование URL стало неотъемлемой частью веб-технологий, обеспечивая надежную связь между различными системами и платформами.

Примеры кода

Вот примеры того, как выполнить кодирование URL на различных языках программирования:

' Пример Excel VBA
Function URLEncode(ByVal Text As String) As String
    Dim i As Integer
    Dim CharCode As Integer
    Dim Char As String
    Dim EncodedText As String

    For i = 1 To Len(Text)
        Char = Mid(Text, i, 1)
        CharCode = AscW(Char)
        Select Case CharCode
            Case 48 To 57, 65 To 90, 97 To 122, 45, 46, 95, 126 ' 0-9, A-Z, a-z, -, ., _, ~
                EncodedText = EncodedText & Char
            Case Else
                If CharCode < 0 Then
                    ' Обработка символов Unicode
                    EncodedText = EncodedText & "%" & Hex(65536 + CharCode)
                Else
                    EncodedText = EncodedText & "%" & Right("0" & Hex(CharCode), 2)
                End If
        End Select
    Next i
    URLEncode = EncodedText
End Function

' Использование:
' =URLEncode("https://example.com/?name=Jürgen")
% Пример MATLAB
function encodedURL = urlEncode(url)
    import java.net.URLEncoder
    encodedURL = char(URLEncoder.encode(url, 'UTF-8'));
end

% Использование:
% encodedURL = urlEncode('https://example.com/?name=Jürgen');
## Пример Ruby
require 'uri'

url = 'https://example.com/path?query=hello world&name=Jürgen'
encoded_url = URI::DEFAULT_PARSER.escape(url)
puts encoded_url
## Вывод: https://example.com/path?query=hello%20world&name=J%C3%BCrgen
// Пример Rust
use url::form_urlencoded;

fn main() {
    let url = "https://example.com/path?query=hello world&name=Jürgen";
    let encoded_url = percent_encode(url);
    println!("{}", encoded_url);
    // Вывод: https://example.com/path%3Fquery%3Dhello%20world%26name%3DJ%C3%BCrgen
}

fn percent_encode(input: &str) -> String {
    use percent_encoding::{utf8_percent_encode, NON_ALPHANUMERIC};
    utf8_percent_encode(input, NON_ALPHANUMERIC).to_string()
}
## Пример Python
import urllib.parse

url = 'https://example.com/path?query=hello world&name=Jürgen'
encoded_url = urllib.parse.quote(url, safe=':/?&=')
print(encoded_url)
## Вывод: https://example.com/path?query=hello%20world&name=J%C3%BCrgen
// Пример JavaScript
const url = 'https://example.com/path?query=hello world&name=Jürgen';
const encodedURL = encodeURI(url);
console.log(encodedURL);
// Вывод: https://example.com/path?query=hello%20world&name=J%C3%BCrgen
// Пример Java
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;

public class URLEncodeExample {
    public static void main(String[] args) throws Exception {
        String url = "https://example.com/path?query=hello world&name=Jürgen";
        String encodedURL = URLEncoder.encode(url, StandardCharsets.UTF_8.toString());
        // Замените "+" на "%20" для пробелов
        encodedURL = encodedURL.replace("+", "%20");
        System.out.println(encodedURL);
        // Вывод: https%3A%2F%2Fexample.com%2Fpath%3Fquery%3Dhello%20world%26name%3DJ%C3%BCrgen
    }
}
// Пример C#
using System;
using System.Net;

class Program
{
    static void Main()
    {
        string url = "https://example.com/path?query=hello world&name=Jürgen";
        string encodedURL = Uri.EscapeUriString(url);
        Console.WriteLine(encodedURL);
        // Вывод: https://example.com/path?query=hello%20world&name=J%C3%BCrgen
    }
}
<?php
// Пример PHP
$url = 'https://example.com/path?query=hello world&name=Jürgen';
$encodedURL = urlencode($url);
echo $encodedURL;
// Вывод: https%3A%2F%2Fexample.com%2Fpath%3Fquery%3Dhello+world%26name%3DJ%C3%BCrgen
?>
// Пример Go
package main

import (
    "fmt"
    "net/url"
)

func main() {
    urlStr := "https://example.com/path?query=hello world&name=Jürgen"
    encodedURL := url.QueryEscape(urlStr)
    fmt.Println(encodedURL)
    // Вывод: https%3A%2F%2Fexample.com%2Fpath%3Fquery%3Dhello+world%26name%3DJ%25C3%25BCrgen
}
// Пример Swift
import Foundation

let url = "https://example.com/path?query=hello world&name=Jürgen"
if let encodedURL = url.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) {
    print(encodedURL)
    // Вывод: https://example.com/path?query=hello%20world&name=J%C3%BCrgen
}
## Пример R
url <- "https://example.com/path?query=hello world&name=Jürgen"
encodedURL <- URLencode(url, reserved = TRUE)
print(encodedURL)
## Вывод: https://example.com/path?query=hello%20world&name=J%C3%BCrgen

Примечание: Вывод может немного отличаться в зависимости от того, как каждый язык обрабатывает зарезервированные символы и пробелы (например, кодирование пробелов как %20 или +).

SVG-диаграмма процесса кодирования URL

Процесс кодирования URL Исходный URL Идентификация специальных символов Кодирование URL Пример: Ввод: https://example.com/über uns Вывод: https://example.com/%C3%BCber%20uns

Соображения по безопасности

Правильное кодирование и декодирование URL имеют критическое значение для безопасности:

  • Предотвращение атак внедрения: Кодирование пользовательского ввода помогает предотвратить выполнение вредоносного кода, снижая риски, такие как межсайтовый скриптинг (XSS) и SQL-инъекции.

  • Целостность данных: Гарантирует, что данные передаются без изменений или повреждений.

  • Соблюдение стандартов: Соблюдение стандартов кодирования предотвращает проблемы совместимости между системами.

Ссылки

  1. RFC 3986 - Унифицированный указатель ресурса (URI): https://tools.ietf.org/html/rfc3986
  2. Что такое кодирование URL и как оно работает? https://www.urlencoder.io/learn/
  3. Процентное кодирование: https://en.wikipedia.org/wiki/Percent-encoding
  4. Стандарт URL: https://url.spec.whatwg.org/
  5. URI.escape устарело: https://stackoverflow.com/questions/2824126/why-is-uri-escape-deprecated

Заключение

Кодирование URL является важным аспектом веб-разработки и интернет-коммуникаций. Преобразуя специальные символы в безопасный формат, оно гарантирует, что URL правильно интерпретируются браузерами и серверами, сохраняя целостность и безопасность передачи данных. Этот инструмент предоставляет удобный способ экранирования специальных символов в ваших URL, улучшая совместимость и предотвращая потенциальные ошибки или уязвимости безопасности.

Обратная связь