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, підвищуючи сумісність і запобігаючи потенційним помилкам або вразливостям безпеки.

Зворотній зв'язок