Whiz Tools

Инструмент за кодиране на URL низ

Инструмент за ескейпване на URL низове

Въведение

В сферата на уеб разработката и интернет комуникациите, URL адресите (Uniform Resource Locators) играят решаваща роля в идентифицирането на ресурси в мрежата. Въпреки това, 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 (Uniform Resource Identifier) през 90-те години. Необходимостта от последователен начин за кодиране на специални символи възникна от разнообразните системи и набори от символи, използвани по целия свят.

Ключови етапи включват:

  • 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 адресите ви, подобрявайки съвместимостта и предотвратявайки потенциални грешки или уязвимости в сигурността.

Обратна връзка