UltKit

ترميز URL وفك ترميزه

اجعل النص آمنًا لوضعه في رابط URL، أو أعِد تسلسلات مثل %20 إلى أحرف مقروءة. تستعمل الأداة دوال متصفحك نفسه encodeURIComponent و encodeURI و decodeURIComponent، وتعرض معاملات الاستعلام في جدول، ولا ترسل أي شيء إلى خادم.

الوضع

0 حرف · 0 كلمة · 0 سطر

0 حرف · 0 كلمة · 0 سطر

تعمل الأداة بالكامل داخل تبويب المتصفح هذا. لا يتم رفع نصك ولا حفظه.

ما تهرّبه كل دالة

حُسبت باستخدام دوال المتصفح نفسها. تترك encodeURIComponent الحروف والأرقام وهذه العلامات دون تغيير: ! ' ( ) * - . _ ~

الحرفencodeURIComponentencodeURI
(مسافة)%20%20
!!!
"%22%22
#%23#
$%24$
%%25%25
&%26&
'''
(((
)))
***
+%2B+
,%2C,
/%2F/
:%3A:
;%3B;
=%3D=
?%3F?
@%40@
[%5B%5B
]%5D%5D
{%7B%7B
}%7D%7D
|%7C%7C
\%5C%5C
^%5E%5E
`%60%60
<%3C%3C
>%3E%3E
~~~
---
___
...
é%C3%A9%C3%A9
€%E2%82%AC%E2%82%AC
😀%F0%9F%98%80%F0%9F%98%80

ترميز النسبة المئوية والأحرف المحجوزة في RFC 3986

لا يجوز أن يحتوي عنوان URL إلا على مجموعة محدودة من أحرف ASCII. وتقسّمها مواصفة RFC 3986، وهي مواصفة صياغة URI الصادرة عام 2005، إلى مجموعتين. الأحرف غير المحجوزة، وهي A–Z وa–z و0–9 والعلامات الأربع - . _ ~، لا تحتاج إلى ترميز أبدًا. أما الأحرف المحجوزة فلها وظائف: فالفواصل العامة : / ? # [ ] @ تفصل بين المخطط والمضيف والمسار والاستعلام والجزء، والفواصل الفرعية ! $ & ' ( ) * + , ; = تفصل بين العناصر داخلها، كما يفعل & و= في سلسلة الاستعلام. وكل ما عدا ذلك، وأي حرف محجوز يُستخدم كبيانات عادية، يجب ترميزه بالنسبة المئوية.

يكتب الترميز بالنسبة المئوية البايت على هيئة % يليه رقمان سداسيان عشريان. يُحوَّل النص أولًا إلى UTF-8، فتصبح المسافة %20، ويصبح الحرف é (بايتان) %C3%A9، ويصبح الإيموجي أربع مجموعات %XX. لذلك يظهر البحث عن "café & bar" في الرابط هكذا: caf%C3%A9%20%26%20bar؛ فالحرف & مُرمَّز كي لا يقرأه الخادم على أنه بداية معامل جديد.

encodeURIComponent و encodeURI وفك الترميز

تُعدّ encodeURIComponent الخيار الصحيح لجزء واحد، مثل قيمة في الاستعلام أو مقطع في المسار أو رابط إعادة توجيه يُمرَّر معاملًا. وهي تهرّب كل شيء عدا الأحرف غير المحجوزة و! ' ( ) * التي تتركها JavaScript كما هي لأسباب تاريخية. أما encodeURI (whole URL) فتفترض أن المدخل عنوان كامل أصلًا وتُبقي الأحرف المحجوزة كما هي، فلا يُرمَّز في https://example.com/a b?q=1 سوى المسافة. واستخدام encodeURI على قيمة معامل خطأ شائع: إذ يبقى & أو # داخل القيمة ويكسر الرابط.

يعكس Decode أيًّا من الدالتين. وتستخدم نماذج HTML المرسلة بالطريقة GET الصيغة الأقدم application/x-www-form-urlencoded التي تُكتب فيها المسافة + بدل %20؛ أبقِ خيار Treat + as a space مفعّلًا في هذه الحالة، وألغِ تفعيله حين يكون لعلامة الجمع معنى حرفي كما في رقم الهاتف. وإذا احتوى المدخل على % لا يتبعه رقمان سداسيان عشريان، أو على بايتات ليست UTF-8 صالحة، يفشل فك الترميز برسالة واضحة بدل التخمين. وحين يحتوي النص على سلسلة استعلام تظهر معاملاتها مفكوكة الترميز في جدول أسفل الأداة. وللبيانات الثنائية في عناوين URL يُعدّ Base64url البديل المعتاد.

الأسئلة الشائعة

هل تُكتب المسافة في رابط URL بالشكل %20 أم بعلامة الجمع؟
في المسارات ووفق RFC 3986 تُكتب المسافة %20. أما الصيغة + فلا تعني مسافة إلا داخل سلاسل الاستعلام المرمَّزة بالطريقة التي ترمّز بها نماذج HTML، لذا يظل %20 الخيار الآمن في كل مكان.
لماذا ظهر %2520 في رابط URL الخاص بي؟
رُمِّز النص مرتين. في المرة الأولى تحولت المسافة إلى %20، وفي الثانية رُمِّز الحرف % نفسه إلى %25. فُك الترميز مرة واحدة لإزالة الطبقة الزائدة، ورمِّز القيم في نقطة واحدة فقط من الشيفرة.
ما الأحرف التي لا تحتاج أبدًا إلى ترميز النسبة المئوية؟
هي مجموعة الأحرف غير المحجوزة في RFC 3986: الحروف من A إلى Z بحالتيها، والأرقام من 0 إلى 9، والشرطة والنقطة والشرطة السفلية والتلدة.
هل يمكن أن يحتوي رابط URL على أحرف غير إنجليزية دون ترميز؟
تعرضها المتصفحات، لكن عند الإرسال عبر الشبكة يُرسَل كل حرف غير ASCII في المسار أو الاستعلام بصيغة UTF-8 مرمَّزة بالنسبة المئوية. أما أسماء النطاقات فتستخدم نظامًا منفصلًا هو Punycode، يحوّلها إلى تسميات تبدأ بـ xn--.
لماذا يُبلغ فك الترميز عن تسلسل غير صالح؟
يحتوي النص على % لا يتبعه رقمان سداسيان عشريان، مثل "100%" حرفيًا، أو أن البايتات تُفك إلى UTF-8 غير صالح. رمِّز علامات % المنفردة إلى %25 قبل فك الترميز.