ترميز وفك ترميز URL
قم بترميز وفك ترميز سلاسل URL لمعالجة الحروف الخاصة ونصوص غير ASCII بأمان، مناسبة لنقل معلمات الاستعلام والمسارات.
إرشادات الاستخدام
يرمز ترميز URL الحروف الخاصة أو غير ASCII إلى صيغة %XX لضمان نقل آمن داخل روابط URL.
استخدم "ترميز" لتحويل النص إلى شكل آمن صالح لـ URL (مثل معلمات الاستعلام).
استخدم "فك الترميز" لإعادة تحويل تسلسلات %XX إلى الحروف الأصلية.
السيناريوهات الشائعة: معالجة معلمات الاستعلام، نقل بيانات النموذج، استدعاءات API إلخ.
الميزات
- وضعين للترميز: 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);