أي رابط بحث أو مسار يحتوي على نص عربي — عبارة بحث في جوجل، أو اسم منتج على متجر إلكتروني — لا يمكن أن يظهر كما هو داخل الرابط، فالحروف العربية والمسافات والرموز مثل & و؟ يجب تحويلها إلى percent-encoding قبل أن يفهمها الخادم بشكل صحيح.
لماذا تتضاعف كلمة عربية واحدة إلى عشرات الرموز
كل حرف عربي يُرمَّز أولًا إلى بايتين بصيغة UTF-8، ثم يتحوّل كل بايت إلى تسلسل مثل %D8%A7 — أي أن الحرف الواحد يصبح ستة رموز بدلًا من رمز واحد. كلمة قصيرة مثل "رياض" قد تتحول بعد الترميز إلى أكثر من 30 رمزًا، وإذا كانت الكلمة تحمل تشكيلًا (حركات) فإن كل علامة تشكيل تُرمَّز بدورها كحرف UTF-8 منفصل، فيطول الرابط أكثر.
الفرق بين encodeURIComponent وencodeURI
encodeURIComponent يرمّز كل الرموز ذات الدلالة البنائية تقريبًا — &، ?، =، / — لذلك يُستخدم لترميز قيمة واحدة فقط، مثل نص بحث عربي يُدرج في ?q=. أما encodeURI فيُبقي على تلك الرموز البنائية لأنه مخصّص لترميز رابط كامل تم تجميعه مسبقًا.
خطأ شائع في روابط واتساب
عند إنشاء رابط واتساب من نوع wa.me أو api.whatsapp.com/send?text= يحتوي رسالة عربية جاهزة، يجب ترميز قيمة النص فقط وليس الرابط كاملًا — ترميز الرابط بأكمله يحوّل علامة ? نفسها إلى %3F فيتوقف الرابط عن العمل.
متى نحتاج إلى هذا
- إدراج نص بحث أو اسم منتج بالعربية داخل معامل رابط.
- إنشاء رابط واتساب أو نموذج ويب يحمل رسالة عربية جاهزة.
- فك الترميز لقراءة نص عربي ظهر في سجلات الخادم كسلسلة
%D8%A....
حالة خاصة: الترميز المزدوج
إذا رُمِّز نص مُرمَّز مسبقًا مرة أخرى، فإن رمز % نفسه يتحوّل إلى %25، فتصبح النتيجة كتلة غير قابلة للقراءة (%D8%A7 تتحول إلى %25D8%25A7). يحدث هذا غالبًا عندما يُرمِّز إطار عمل الرابط تلقائيًا، ثم يستدعي المطوّر encodeURIComponent يدويًا على قيمة مرمّزة أصلًا.