ترميز وفك ترميز عناوين URL
قم بترميز وفك ترميز سلاسل نصية لعناوين URL لمعالجة الأحرف الخاصة والنص غير ASCII بأمان، مثالي لمعاملات الاستعلام ونقل المسارات.
طريقة الاستخدام
يقوم ترميز عنوان URL بتحويل الأحرف الخاصة أو غير ASCII إلى تنسيق %XX لضمان النقل الآمن داخل عناوين URL.
استخدم 'ترميز' لتحويل النص إلى تنسيق آمن لعناوين URL (مثل معاملات الاستعلام).
استخدم 'فك الترميز' لاستعادة تسلسلات %XX إلى أحرفها الأصلية.
سيناريوهات شائعة: معالجة معاملات الاستعلام، نقل بيانات النماذج، استدعاءات واجهات برمجة التطبيقات (API)، وغيرها.
الميزات
- وضعان للترميز: encodeURIComponent و encodeURI
- معالجة مرنة للمسافات: ترميزها كـ + أو %20
- تحويل فوري مع إحصائيات طول المدخلات والمخرجات
- أزرار نسخ/مسح وإرسال ثنائي الاتجاه إلى اللوحة
- دعم كامل للتوطين مع سلاسل DaisyUI المتعددة
ما هو ترميز عنوان URL؟
يحوّل ترميز URL الأحرف إلى تسلسلات مئوية بصيغة %XX لضمان نقل آمن في الروابط.
يُستخدم encodeURIComponent للمكونات الفردية (مثل قيمة معامل استعلام واحد) ويرمز معظم الأحرف غير الأبجدية الرقمية.
صُمم encodeURI لسلاسل URI الكاملة ويحفظ الأحرف المحجوزة ذات الدلالة الهيكلية، مثل ? و & و = و /.
حالات الاستخدام الشائعة
- بناء معاملات الاستعلام (مثل كلمات البحث وشروط التصفية)
- ترميز بيانات النموذج ونقلها عبر GET/POST
- ترميز معاملات طلبات واجهة برمجة التطبيقات (API)
- إدخال مدخلات المستخدم بأمان في مقاطع مسار URL
الأسئلة الشائعة والأخطاء المحتملة
- فرق بين encodeURI و encodeURIComponent: استخدم ترميز المكونات للأجزاء الفردية، وترميز 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);