کدگذاری و رمزگشایی URL

کدگذاری و رمزگشایی رشته‌های URL برای پردازش ایمن کاراکترهای خاص و متن‌های غیر ASCII، مناسب برای پارامترهای پرس‌وجو و انتقال مسیر.

کدگذاری

حالت کدگذاری

رمزگشایی

راهنمای استفاده

کدگذاری URL کاراکترهای خاص یا غیر ASCII را به فرمت %XX تبدیل می‌کند تا بتوان آن‌ها را به‌صورت ایمن در URL انتقال داد.
از «کدگذاری» برای تبدیل متن به فرم ایمن مناسب URL (مانند پارامترهای پرس‌وجو) استفاده کنید.
از «رمزگشایی» برای بازگرداندن دنباله‌های %XX به کاراکترهای اصلی استفاده کنید.
سناریوهای رایج: مدیریت پارامترهای پرس‌وجو، انتقال داده‌های فرم، فراخوانی API و غیره.

مثال‌های سریع

متن اصلی
https://example.com/search?q=你好世界&type=text
کدگذاری URL
https://example.com/search?q=%E4%BD%A0%E5%A5%BD%E4%B8%96%E7%95%8C&type=text

ویژگی‌ها

  • دو حالت کدگذاری: encodeURIComponent و encodeURI
  • مدیریت انعطاف‌پذیر فضا: کدگذاری به صورت + یا %20
  • تبدیل لحظه‌ای و نمایش آمار طول ورودی/خروجی
  • دکمه‌های کپی/پاک کردن و ارسال دوطرفه به پنل مقابل
  • پشتیبانی کامل از بین‌المللی‌سازی و تم‌های مختلف DaisyUI

کدگذاری URL چیست؟

کدگذاری URL، کاراکترها را به دنباله‌های درصدی %XX تبدیل می‌کند تا بتوان آن‌ها را به ایمنی در URL انتقال داد.

encodeURIComponent برای تک‌مؤلفه‌ها (مانند مقدار پارامترهای پرس‌وجو) مناسب است و اکثر کاراکترهای غیرحرف-عددی را کدگذاری می‌کند.

encodeURI برای رشته‌های URI کامل مناسب است و کاراکترهای رزرو شده با معنای ساختاری مانند ?, &, =, / را کدگذاری نمی‌کند.

کاربردهای رایج

  • ساخت پارامترهای پرس‌وجو (کلمات جستجو، شرایط فیلتر و غیره)
  • کدگذاری و انتقال داده‌های فرم GET/POST
  • کدگذاری پارامترهای درخواست API
  • قراردادن ایمن ورودی کاربر در بخش‌های مسیر URL

سوالات متداول و اشتباهات رایج

  • encodeURI در برابر encodeURIComponent: از component برای پارامترها و از URI برای لینک کامل استفاده کنید
  • فاصله و +: در رشته‌های پرس‌وجو، application/x-www-form-urlencoded از + برای نمایش فاصله استفاده می‌کند
  • از دوباره‌کدگشایی جلوگیری کنید: کدگشایی مکرر می‌تواند داده‌ها را خراب کند
  • دنباله‌های درصدی نامعتبر باعث خطایی می‌شوند؛ باید به‌صورت ظریف با خطاها مدیریت شوند

چگونه در زبان‌های برنامه‌نویسی کدگذاری و رمزگشایی URL انجام دهیم؟

JavaScript
کدگذاری
// Component (recommended for query values)
const encoded = encodeURIComponent(text);
// If you need '+' for spaces in query strings
const encodedPlus = encoded.replace(/%20/g, '+');
// Full URI
const encodedUri = encodeURI(url);
کدگشایی
// Treat '+' as space if needed
const input = plusAsSpace ? s.replace(/\+/g, ' ') : s;
// Component
const dec1 = decodeURIComponent(input);
// Fallback to decodeURI when input is a full URL
const dec2 = decodeURI(input);
PHP
کدگذاری
// Component (RFC 3986)
$encoded = rawurlencode($text);
// '+' for spaces (application/x-www-form-urlencoded)
$encodedPlus = str_replace('%20', '+', $encoded);
// Full query usage
$query = http_build_query(['q' => '你好 世界', 'type' => 'text']);
کدگشایی
// Component
$decoded = rawurldecode($s);
// If input uses '+' for spaces
$decodedPlus = urldecode($s);
Python
کدگذاری
from urllib.parse import quote, quote_plus

# Component (RFC 3986)
enc = quote(text, safe='')
# '+' for spaces (application/x-www-form-urlencoded)
enc_plus = quote_plus(text)
کدگشایی
from urllib.parse import unquote, unquote_plus

# Component
dec = unquote(s)
# Input with '+' for spaces
dec_plus = unquote_plus(s)
Go
کدگذاری
import (
    "net/url"
)

// Query component
enc := url.QueryEscape(text) // spaces => +
// Path segment
// go1.8+
// url.PathEscape(text)
کدگشایی
import (
    "net/url"
)

// Query component
dec, _ := url.QueryUnescape(s)
// Path segment
// url.PathUnescape(s)
Rust
کدگذاری
// Cargo.toml: urlencoding = "^2"
use urlencoding::{encode, encode_binary};

let enc = encode(text);              // component; spaces => %20
let enc_plus = enc.replace("%20", "+"); // if you need '+' for spaces
کدگشایی
use urlencoding::decode;

// decode treats '+' as space
let dec = decode(s)?; // Result, _>
Java
کدگذاری
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;

// Query param / form style (spaces => '+')
String enc = URLEncoder.encode(text, StandardCharsets.UTF_8);
// For RFC3986-like component encoding, replace '+' with %20 if needed
String encSpace = enc.replace("+", "%20");
کدگشایی
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;

// URLDecoder treats '+' as space
String dec = URLDecoder.decode(s, StandardCharsets.UTF_8);