رمزگذاری و رمزگشایی 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 تبدیل می‌کند تا انتقال ایمن در URLs تضمین شود.

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

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

موارد استفاده رایج

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

سوالات متداول و مشکلات رایج

  • encodeURI در مقابل encodeURIComponent: از رمزگذاری کامپوننت برای بخش‌های جداگانه و از رمزگذاری URI برای کل URLs استفاده کنید
  • فاصله‌ها و +: در 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);