تخطّ إلى المحتوى
🚀 عشر أدوات متاحة الآن، مجانًا إلى الأبد — وصندوق الأدوات يكبر باستمرار
الرئيسية›المدونة›شرح ترميز الروابط: الترميز المئوي و⁦%20⁩ والأخطاء الشائعة
الأدلة

شرح ترميز الروابط: الترميز المئوي و⁦%20⁩ والأخطاء الشائعة

كيف يتحول الحرف إلى ⁦%XX⁩، وأي الأحرف يقبلها الرابط كما هي، ولماذا يعطي encodeURIComponent وencodeURI نتائج مختلفة، ومتى تكون المسافة ⁦+⁩ ومتى تكون ⁦%20⁩، وكيف تتعقّب الترميز المزدوج الذي يقف وراء ⁦%2520⁩.

✍ بقلم المؤسس والرئيس التنفيذي، فريق BuildToolForge🗓 2026-10-31⏱ 8 دقيقة
ترميز-الروابطالترميز-المئويquery-stringutf-8encodeuricomponent
دليل الترميز2026

ترميز الروابط
بكل بساطة

كيف ينتقل النص بأمان داخل الرابط

الأحرف المحجوزة · ⁦%20⁩ أم ⁦+⁩ · UTF-8

url · encode
> encodeURIComponent("café & crème")
الناتجcaf%C3%A9%20%26%20cr%C3%A8me
> decodeURIComponent("a%2520b")
الناتجa%20b
✓ حرف «م» بايتان في UTF-8، لذا يصبح %XX مرتين
ترميزات شائعة
%20
مسافة
%2F
/
%3F
?
%26
&
%3D
=
%25
%
غير المحجوزة: لا تُرمَّز أبدًاالمحجوزة: تُرمَّز داخل القيمبايتات UTF-8ليس تشفيرًا

ما هو ترميز الروابط فعلًا

ترميز الروابط، ويُسمّى أيضًا الترميز المئوي، هو الطريقة التي يحمل بها الرابط أحرفًا لا يُسمح له باحتوائها. لا يقبل الرابط إلا مجموعة صغيرة من الحروف اللاتينية والأرقام وبعض الرموز. أما الباقي — المسافة والحروف العربية والرموز التعبيرية والكلمات السيريلية — فيُكتب على شكل % يليها رقمان ست عشريان لكل بايت.

تُستخدم الحيلة نفسها مع أحرف مسموح بها لكنها تحمل معنى. فعلامة ? تبدأ الاستعلام و& تفصل بين المُعاملات، لذا فإن البحث عن خبز & جبن يجب أن يرسل علامة & على شكل %26، وإلا رأى الخادم مُعاملين بدل واحد.

هذه هي مهمته كلها: جعل القيمة آمنة داخل الرابط دون تغيير معناه. وهو ليس ضغطًا ولا تشفيرًا ولا مرشّح أمان.

كيف يتحول الحرف إلى ⁦%XX⁩

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

الحرف اللاتيني الأساسي بايت واحد، فتصبح المسافة (البايت 32، أي 20 بالست عشري) %20. أما الأحرف خارج ASCII فتشغل من بايتين إلى أربعة في UTF-8، ويحصل كل بايت على ترميزه الخاص:

  • م ← البايتان D9 85 ← %D9%85
  • € ← البايتات E2 82 AC ← %E2%82%AC
  • 😀 ← البايتات F0 9F 98 80 ← %F0%9F%98%80

فك الترميز يعكس الخطوات: تُجمع البايتات ثم تُقرأ على أنها UTF-8. وإن كانت البايتات قد أُنتجت بمجموعة أحرف أخرى مثل Windows-1256، يخرج نص مشوّه غير مقروء. كل المتصفحات وأطر العمل الحديثة تستخدم UTF-8، وعليك أن تفعل مثلها.

المحجوزة وغير المحجوزة ولماذا يهم السياق

يقسم RFC 3986 أحرف الرابط إلى مجموعتين.

الأحرف غير المحجوزة — A–Z a–z 0–9 - . _ ~ — لا تحتاج إلى ترميز أبدًا. ترميزها مسموح لكنه بلا فائدة، والمرمِّز الجيد يتركها كما هي.

الأحرف المحجوزة — : / ? # [ ] @ ! $ & ' ( ) * + , ; = — تعطي الرابط بنيته. وترميز أحدها يعتمد على موضعه. فعلامة / بين أجزاء المسار يجب أن تبقى شرطة مائلة، أما / داخل اسم ملف تمرّره كمُعامل فيجب أن تصبح %2F. لهذا لا توجد طريقة واحدة صحيحة «لترميز رابط»: بل تُرمِّز كل جزء بحسب المكان الذي سيذهب إليه.

encodeURIComponent أم encodeURI

في JavaScript دالتان مدمجتان، واختيار الخاطئة منهما هو أكثر أخطاء الروابط شيوعًا.

الدالةاستخدمها لـتترك دون ترميز
encodeURIComponentقيمة واحدة: مُعامل أو جزء من المسارالأحرف غير المحجوزة فقط
encodeURIعنوان كامل يجب أن يبقى صالحًاالأحرف المحجوزة أيضًا

طبّق encodeURI على قيمة مثل a&b=c وستنجو & و= فيصبح مُعاملك اثنين. وطبّق encodeURIComponent على رابط كامل فتُهرَّب كل / و: ولا يعود الرابط رابطًا. القاعدة: ابنِ الرابط من أجزائه ورمِّز كل قيمة بـ encodeURIComponent، أو الأفضل أن تترك المهمة لـ URLSearchParams.

وفي اللغات الأخرى التقسيم نفسه: quote وquote_plus في Python، وrawurlencode وurlencode في PHP. وتوفّر أداة ترميز الروابط وفك ترميزها الوضعين لترى الفرق على مدخلاتك.

⁦+⁩ أم ⁦%20⁩: استثناء النماذج

في المسار تكون المسافة %20 وعلامة + مجرد علامة جمع. لكن نماذج HTML المرسلة بالنوع الافتراضي application/x-www-form-urlencoded ترمِّز المسافة على شكل + في الاستعلام، ثم يفك الخادم ترميزها.

تبدأ المشكلة حين يلتقي الاصطلاحان. رقم هاتف مثل +971 50 123 4567 يوضع في الاستعلام دون ترميز يصل على شكل 971 50 123 4567، لأن الخادم قرأ + كمسافة. الحل أن ترمِّز علامة الجمع إلى %2B، وهو ما يفعله كل مرمِّز يتبع قواعد النماذج. وإن لم تكن متأكدًا من الاصطلاح الذي يتوقعه الطرف الآخر، فإن %20 للمسافة و%2B لعلامة الجمع آمنتان دائمًا.

الترميز المزدوج وخطأ ⁦%2520⁩

%25 هي علامة النسبة المئوية نفسها بعد ترميزها. لذا حين ترى %2520 في رابط فهي %20 رُمِّزت مرة ثانية: أي أن قيمة مرّت بمرمِّز بعد أن كانت مُرمَّزة أصلًا.

يحدث ذلك عادةً عند نقطة التقاء — إطار عمل يرمِّز مُعاملًا سبق أن رمّزته الشيفرة المستدعية، أو رابط إعادة توجيه يُرمَّز مرة ليتسع داخل رابط آخر ثم مرة أخرى بواسطة مكتبة. والعَرَض الظاهر خطأ 404، أو بحث عن النص الحرفي %20، أو اسم ملف مليء بعلامات النسبة المئوية.

فك الترميز مرتين يعيد الأصل، لكن الإصلاح الحقيقي هو العثور على المرمِّز الثاني وإزالته. رمِّز مرة واحدة فقط، لحظة وضع القيمة في الرابط.

الترميز ليس تهريبًا ولا تشفيرًا

يجعل الترميز المئوي القيمة آمنة داخل الرابط فقط. ولا يفعل شيئًا لـ HTML أو JavaScript أو SQL. فبمجرد أن يفك الخادم ترميز %3Cscript%3E يعود لديه <script> عادي تمامًا، لذا لا بد من تهريب المخرجات بحسب وجهتها، ولا تزال استعلامات قواعد البيانات تحتاج إلى مُعاملات.

وهو ليس سرية أيضًا. يستطيع أي شخص فك ترميز الرابط، والروابط تنتهي في سجلات الخادم وسجل المتصفح وأدوات التحليل وترويسة Referer للصفحة التالية. لا تضع أبدًا كلمة مرور أو رمزًا أو بيانات شخصية في الاستعلام لمجرد أنها «تبدو مشوّشة». والأمر نفسه ينطبق على Base64 كما يشرح دليل Base64 لدينا.

حين يفشل فك الترميز

معظم مشكلات الروابط واحدة مما يلي:

  • «URIError: malformed URI sequence». بعد % لا يوجد رقمان ست عشريان، أو البايتات ليست UTF-8 صالحًا. وعلامة النسبة الحرفية نفسها يجب أن تُرسل على شكل %25.
  • تظهر الحروف العربية رموزًا غريبة أو �. كُتبت البايتات بمجموعة أحرف وقُرئت بأخرى. تأكد من أن الطرفين يستخدمان UTF-8.
  • يُقطع المُعامل عند &. لم تُرمَّز القيمة، أو رُمِّزت بـ encodeURI بدل encodeURIComponent.
  • تتحول علامات الجمع إلى مسافات. عامل فك ترميز النماذج + كمسافة. رمِّز علامة الجمع الحقيقية إلى %2B.
  • %2520 و%253D وأمثالهما. ترميز مزدوج: ابحث عن المرمِّز الثاني.

الصق الرابط في أداة فك ترميز وانظر إلى كل مُعامل استعلام على حدة، فعادةً ما يتضح سبب المشكلة في ثوانٍ.

أدوات وأدلة ذات صلة:

أسئلة شائعة

ما ترميز الروابط؟⌄

ترميز الروابط، ويُسمّى أيضًا الترميز المئوي، يكتب الأحرف غير المسموح بها في الرابط على شكل % يليها رقمان ست عشريان لكل بايت UTF-8. فتصبح المسافة ⁦%20⁩ ويصبح الحرف «م» ⁦%D9%85⁩. وبهذا ينتقل أي نص داخل الرابط دون أن يتغير معناه.

لماذا تكون المسافة أحيانًا ⁦+⁩ وأحيانًا ⁦%20⁩؟⌄

نماذج HTML المرسلة بصيغة application/x-www-form-urlencoded ترمِّز المسافة على شكل ⁦+⁩ في الاستعلام. وفي كل مكان آخر، بما في ذلك المسارات ومعظم واجهات API، تكون المسافة ⁦%20⁩ وتكون ⁦+⁩ علامة جمع حرفية. و⁦%20⁩ آمنة دائمًا.

هل أستخدم encodeURI أم encodeURIComponent؟⌄

استخدم encodeURIComponent لقيمة واحدة مثل مُعامل استعلام أو جزء من المسار، لأنه يرمِّز & و= و/ و?. واستخدم encodeURI فقط لرابط كامل يجب أن يحتفظ ببنيته.

ماذا يعني ⁦%2520⁩؟⌄

إنها مسافة مُرمَّزة مرتين: ⁦%25⁩ هي علامة النسبة المئوية، لذا فإن ⁦%2520⁩ هي ⁦%20⁩ مُرمَّزة للمرة الثانية. فُك ترميزها مرتين لقراءتها، ثم أصلح الشيفرة التي ترمِّز القيمة مرتين.

هل ترميز الروابط آمن؟⌄

لا. يستطيع أي شخص عكسه، ولا يوفر أي سرية، وقد تحمل المدخلات بعد فك ترميزها هجوم حقن. هرِّب المخرجات لـ HTML، واستخدم الاستعلامات ذات المُعاملات في قواعد البيانات، ولا تضع أي أسرار في رابط.

عن الكاتب
المؤسس والرئيس التنفيذي، BuildToolForge
تابعنا على X: @Buildtoolforge

خبرة عملية تزيد على 15 عامًا في تطوير الويب وأمنه. يركّز على أمن الويب العملي: الحفاظ على المواقع آمنة وموثوقة وسهلة التشخيص. وُجد BuildToolForge ليجعل هذه الفحوصات مجانية وخاصة ومفهومة. تعمل الأدوات في متصفحك كلما أمكن، ولا يُخزَّن أي شيء تُدخله في أداة.

كيف نكتب أدلتنا: يُكتب كل دليل من خبرة عملية، ويُراجَع وفق المعايير الرسمية، ويُختبر بأدواتنا على نطاقات حقيقية، ونحدّثه عندما تتغير المعايير أو الأدوات. وجدت خطأً؟ راسلنا على contact@buildtoolforge.com.

آخر تحديث: 2 نوفمبر 2026