Utilia

تهريب النصوص وفك تهريبها (Escape/Unescape)

هرّب النصوص أو فكّ تهريبها لصيغ JSON وJavaScript والقوالب الحرفية وSQL وCSV وخصائص HTML والتعابير النمطية وURL، مباشرةً في متصفحك.

كيف تهرّب نصًا أو تفكّ تهريبه؟

  1. اختر الوجهة من الصيغة: سلسلة JSON، أو سلسلة JavaScript، أو قالب JavaScript حرفي، أو سلسلة SQL حرفية، أو حقل CSV، أو قيمة خاصية HTML، أو تعبير نمطي، أو مكوّن URL.
  2. اكتب نصك أو الصقه في مربع الإدخال.
  3. انقر تهريب لتحويل النص العادي إلى قيمة حرفية آمنة، أو فك التهريب لإعادة القيمة الحرفية إلى نص عادي. تتحدّث النتيجة أثناء الكتابة في الاتجاه الذي اخترته آخر مرة.
  4. اضبط الخيارات الظاهرة للصيغة المختارة: إضافة علامات اقتباس محيطة أو تهريب الأحرف غير ASCII أو المسافات كـ + (بيانات النماذج).
  5. انقر نسخ، أو استخدام النتيجة كمدخل لعكس العملية والتأكد من أن النص يعود كما كان.

يظهر عدد الأحرف قبل التحويل وبعده تحت الأزرار. كل شيء يعمل في متصفحك ولا يُرفع أي شيء.

«التهريب» (escaping) هو إضافة شرطة مائلة عكسية أو كيان أو ترميز قبل الأحرف الخاصة كي تُقرأ حرفيًا ولا تكسر الصيغة، كعلامة الاقتباس داخل سلسلة نصية.

ماذا تفعل كل صيغة؟

  • سلسلة JSON: تهرّب " و\ وأحرف التحكم (\n و\t و\u0000…) تمامًا كما تفعل JSON.stringify. ومع تهريب الأحرف غير ASCII يصبح كل حرف بعد U+007E على شكل \uXXXX، وهذا يشمل الحروف العربية (الرموز التعبيرية تصبح زوجًا بديلًا مثل 😀). ويقبل فك التهريب النص مع علامتي الاقتباس المزدوجتين أو دونهما، ويتسامح مع فواصل الأسطر الخام.
  • سلسلة JavaScript (‘…’): تهرّب الشرطة المائلة العكسية وعلامة الاقتباس المفردة وفواصل الأسطر وأحرف التحكم، إضافةً إلى U+2028 وU+2029 اللذين يعطّلان المحركات القديمة. ويفهم فك التهريب \x41 وA و\u{1F600} والتهريبات الثمانية القديمة مثل \101 واستمرار الأسطر.
  • قالب JavaScript حرفي (`…`): يهرّب علامات الاقتباس المائلة (backtick) والشرطات المائلة العكسية و${ كي لا يُقيَّم أي تعبير، وتبقى فواصل الأسطر والجدولة كما هي لأن القوالب الحرفية تسمح بها.
  • سلسلة SQL حرفية (‘…’): تضاعف علامات الاقتباس المفردة (O'Brien ← 'O''Brien') كما في SQL القياسي. ويرفض فك التهريب أي علامة اقتباس غير مضاعفة. وتُترك الشرطات المائلة العكسية كما هي: فقاعدة MySQL في وضعها الافتراضي تعامل \ أيضًا كحرف تهريب، لذا راجع قواعد قاعدة بياناتك.
  • حقل CSV ‏(RFC 4180): يحيط الحقل بعلامتي اقتباس مزدوجتين ويضاعف علامات الاقتباس الداخلية إذا احتوى على فاصلة أو فاصلة منقوطة أو جدولة أو علامة اقتباس أو فاصل سطر أو مسافة في البداية أو النهاية. ويفرض خيار إضافة علامات اقتباس محيطة علامات الاقتباس دائمًا.
  • قيمة خاصية HTML: تستبدل & و< و> و" و' بكيانات، وهو ما يجعلها آمنة في الخصائص المحاطة بعلامات اقتباس مفردة أو مزدوجة. ويفك التهريب المراجع الرقمية و&amp; و&lt; و&gt; و&quot; و&apos; و&nbsp;.
  • تعبير نمطي (نص حرفي): يسبق الأحرف . * + ? ^ $ { } ( ) | [ ] \ / وفواصل الأسطر والجدولة بشرطة مائلة عكسية، فيطابق النمط النص حرفيًا. والنتيجة صالحة مع العلامة u ودونها.
  • مكوّن URL (ترميز النسبة المئوية): يعمل مثل encodeURIComponent، فيرمّز كل شيء عدا الحروف اللاتينية والأرقام و- _ . ! ~ * ' ( ) على شكل بايتات UTF-8. ويستخدم خيار المسافات كـ + (بيانات النماذج) اصطلاح application/x-www-form-urlencoded.

التهريب ليس حاجز أمان في SQL

عند اختيار SQL تعرض الأداة تذكيرًا يستحق التكرار: العلاج الحقيقي لحقن SQL هو الاستعلام ذو المعاملات (prepared statement)، حيث تُرسل القيمة منفصلةً عن نص SQL. أما التهريب اليدوي فهش: يعتمد على قاعدة البيانات، وعلى مجموعة أحرف الاتصال، وعلى إعدادات مثل طريقة تعامل MySQL مع الشرطة المائلة العكسية. استخدم هذه النتيجة لقراءة السجلات أو كتابة بيانات الاختبار أو تصحيح استعلام، ولا تستخدمها أبدًا لبناء استعلامات من مدخلات المستخدمين.

وفي CSV تحذّر الأداة أيضًا عندما تبدأ القيمة بـ = أو + أو - أو @: فقد يشغّلها برنامج جداول البيانات كصيغة (حقن CSV). والاقتباس لا يمنع ذلك؛ الحل المعتاد هو أن تسبق القيمة بفاصلة عليا أو مسافة.

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

ما الفرق بين سلسلة JSON وسلسلة JavaScript؟

لا يسمح JSON إلا بعلامات الاقتباس المزدوجة وبمجموعة صغيرة من التهريبات (\" \\ \/ \b \f \n \r \t \uXXXX). أما JavaScript فتقبل أيضًا علامات الاقتباس المفردة والمائلة و\x41 و\u{…} و\v و\0. تهريبات JSON الصالحة صالحة في JavaScript، والعكس غير صحيح.

لماذا يفشل فك التهريب برسالة «تسلسل تهريب غير صالح»؟

يحتوي النص على شرطة مائلة عكسية يتبعها شيء لا تسمح به الصيغة، مثل \u12 بأقل من أربعة أرقام ست عشرية، أو شرطة مائلة عكسية منفردة في النهاية. تعرض رسالة الخطأ التسلسل المعيب.

هل يحتاج كل حقل في CSV إلى علامات اقتباس؟

لا. لا يشترط RFC 4180 علامات الاقتباس إلا إذا احتوى الحقل على فاصلة أو علامة اقتباس مزدوجة أو فاصل سطر. وتقتبس هذه الأداة أيضًا الفواصل المنقوطة والجدولة والمسافات في البداية أو النهاية، لأن كثيرًا من برامج الجداول تستخدمها فواصل أو تحذفها.

هل يكفي تهريب خصائص HTML لمنع XSS؟

إنه صحيح للنص الموضوع داخل قيمة خاصية مقتبسة. لكنه لا يكفي للخصائص التي هي نفسها شيفرة أو روابط، مثل onclick أو href="javascript:…"؛ فهذه تحتاج إلى تحقق من المحتوى لا إلى تهريب فقط.

هل يُرسل نصي إلى خادم؟

لا. تجري كل التحويلات محليًا في متصفحك، لذا يمكنك لصق قيم الإعدادات أو بيانات لا ترغب في مشاركتها بأمان.