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

ترميز URL يستبدل المحارف غير الآمنة بعلامة النسبة المئوية ورقمين ست عشريين. فالمسافة تصبح %20، و"a&b" تصبح a%26b. وفك ترميز caf%C3%A9 يعطي café.

هل حُلّت مشكلتك؟
فضّلنا على Google

طريقة الاستخدام

  1. اختر الترميز أو فك الترميز، ثم اكتب النص أو الصقه في خانة الإدخال.
  2. اختر المكوّن لترميز قيمة واحدة مثل كلمة بحث. واختر الرابط الكامل لترميز عنوان كامل مع إبقاء محارف مثل : / ? & = # كما هي.
  3. فعّل خيار علامة + إذا كان النص يستخدم + للمسافات كما في نماذج HTML. تتحدث النتيجة أثناء الكتابة.
  4. إذا كان الإدخال رابطًا أو query string، يسرد الجدول تحت النتيجة كل معامل بمفتاحه وقيمته بعد فك الترميز. اضغط نسخ لنسخ الناتج، أو استخدامه كإدخال لإعادة النتيجة إلى الخانة لجولة أخرى.

طريقة الحساب

يحوّل ترميز النسبة المئوية كل محرف غير آمن إلى بايتات UTF-8، ويكتب كل بايت كعلامة نسبة مئوية يتبعها رقمان ست عشريان. الحرف é هو البايتان C3 A9 فيصبح %C3%A9. والحرف العربي يأخذ بايتين، فتصبح كلمة "مرحبا" عشر مجموعات %XX. والرمز التعبيري يأخذ أربعة بايتات فيصبح أربع مجموعات %XX.

وضع المكوّن يستخدم encodeURIComponent. يُبقي الحروف والأرقام و- _ . ! ~ * ' ( ) فقط ويهرّب كل ما عداها، بما فيها / ? & = : و#. استخدمه لقيمة واحدة داخل رابط. ووضع الرابط الكامل يستخدم encodeURI الذي يُبقي أيضًا المحارف التي تمنح الرابط بنيته (; , / ? : @ & = + $ #)، فهو مخصص لعنوان كامل.

فك الترميز يعكس ذلك. إذا احتوى النص على % لا يتبعها رقمان ست عشريان، أو لم تشكّل البايتات UTF-8 صالحًا، يرفض المتصفح فك ترميزه وتعرض الأداة خطأ. وفي جدول المعاملات يبقى هذا الجزء كما كُتب ويُعلَّم بالأحمر، كي لا تخفي قيمة واحدة تالفة الباقي.

علامة + تعني مسافة فقط في بيانات النماذج (application/x-www-form-urlencoded) وفي معظم query strings. أما في المسار فهي علامة + حرفية. يقرأ جدول المعاملات + دائمًا كمسافة، بينما لا يفعل ذلك المفكك الرئيسي إلا عند تفعيل الخيار.

المحارف الشائعة

المحرفبعد الترميزملاحظة
مسافة%20 (أو +)+ في query strings فقط
&%26يفصل المعاملات، فرمّزه داخل القيمة
=%3Dيفصل المفتاح عن القيمة
?%3Fيبدأ query string
#%23يبدأ المقطع (fragment)
/%2Fفاصل المسار
%%25محرف الهروب نفسه
+%2Bعلامة + الحرفية يجب ترميزها

أسئلة شائعة

ما الفرق بين encodeURI وencodeURIComponent؟

encodeURIComponent يهرّب المحارف التي تفصل أجزاء الرابط (/ ? & = : #)، فهو آمن لقيمة واحدة. أما encodeURI فيتركها، لذا يرمّز عنوانًا كاملًا دون كسر بنيته.

لماذا تتحول المسافة إلى %20 أو إلى علامة +؟

%20 هو الترميز القياسي للمسافة ويعمل في كل مكان. وعلامة + هي ترميز النماذج الأقدم للمسافة ولا تصح إلا في query strings. ويكتب خيار علامة + الرمز + بدل %20 عند الترميز.

لماذا يفشل فك الترميز بخطأ تسلسل غير صالح؟

في النص علامة % منفردة، أو % يتبعها محارف غير ست عشرية، أو بايتات ليست UTF-8 صالحًا مثل %C3 وحدها. أصلح الجزء التالف أو احذفه. ويظل جدول المعاملات يعرض بقية المعاملات.

هل يتعامل مع النص العربي والرموز التعبيرية؟

نعم. يُحوَّل النص إلى UTF-8 أولًا، فتُرمَّز أي لغة والرموز التعبيرية وتُستعاد بشكل صحيح.

هل يُرسل الرابط إلى خادم؟

لا. كل شيء يعمل في متصفحك، والروابط التي تحمل رموز وصول أو بيانات شخصية لا تغادر جهازك.