تهريب النصوص هو عملية إضافة شرطة مائلة عكسية (أو علامة أخرى) قبل الأحرف ذات المعنى الخاص داخل النص الحرفي. عندما يصادف محلل لغة برمجية علامة اقتباس مزدوجة داخل نص محاط بعلامات اقتباس مزدوجة، فإنه يعدّها نهايةً للنص. إضافة شرطة مائلة عكسية قبل علامة الاقتباس — بكتابة \" بدلاً من " — يُخبر المحلل بأنها حرف حرفي وليست محدِّداً. كل لغة تستخدم نصوصاً حرفية لها قواعد تهريب، وإن كانت المتواليات الدقيقة تختلف من لغة إلى أخرى.
أكثر متواليات التهريب شيوعاً تُعبّر عن مسافات بيضاء وأحرف تحكم لا يمكن إدراجها مباشرةً في الكود المصدري. يصبح السطر الجديد \n، والجدولة \t، والشرطة المائلة العكسية الحرفية \\. تعود هذه الاصطلاحات إلى لغة C (ISO/IEC 9899) وتبنّتها JavaScript (ECMA-262) وPython وJava وGo وRust. يستخدم JSON (RFC 8259) الصياغة ذاتها لكنه يدعم مجموعة أصغر من المتواليات.
إلغاء التهريب (المعروف أحياناً بـ "de-escaping") هو العملية العكسية: تحويل متواليات التهريب إلى أحرفها الأصلية. يشيع ذلك عند قراءة ملفات السجل، أو تحليل استجابات API، أو تنقيح البيانات التي جرى تهريبها مرتين. كلتا العمليتين آلية وعُرضة للأخطاء عند إجرائها يدوياً، ولهذا يلجأ المطورون إلى أداة تهريب/إلغاء تهريب عند التعامل مع نصوص متعددة الأسطر أو علامات اقتباس متداخلة أو أحرف Unicode.
لماذا تستخدم أداة تهريب النصوص أونلاين؟
إضافة الشرطات المائلة العكسية أو إزالتها يدوياً أمر مضنٍ وسهل الخطأ، لا سيما مع علامات الاقتباس المتداخلة أو المدخلات متعددة الأسطر. توفر أداة تهريب النصوص في المتصفح نتائج فورية دون الحاجة إلى إعداد بيئة REPL أو كتابة نصوص برمجية مؤقتة.
⚡
تحويل فوري
الصق نصك واحصل على النتيجة المهرَّبة أو غير المهرَّبة فوراً. لا حاجة لفتح طرفية أو تشغيل REPL أو كتابة سكريبت مؤقت.
🔀
التبديل بين الصيغ
بدّل بين أوضاع التهريب الخاصة بـ JavaScript وPython وJSON. تتعامل كل لغة مع علامات الاقتباس المفردة وUnicode وأحرف التحكم بشكل مختلف — تُطبّق الأداة القواعد الصحيحة تلقائياً.
🔒
معالجة تحترم الخصوصية
يجري كل تهريب وإلغاء تهريب في متصفحك باستخدام JavaScript. لا تُرسَل نصوصك إلى أي خادم، وهذا مهم عند التعامل مع مفاتيح API أو الرموز المميزة أو بيانات المستخدمين.
📋
لا تسجيل دخول ولا تثبيت
افتح الصفحة وابدأ في اللصق. لا حاجة لإنشاء حساب، ولا لتثبيت امتداد، ولا لتجاوز جدار موافقة الكوكيز.
حالات استخدام تهريب النصوص
تطوير الواجهات الأمامية
هرّب المحتوى الذي ينشئه المستخدمون قبل حقنه في سمات HTML أو السكريبتات المضمّنة أو القوالب الحرفية. يمنع ذلك الترميز المعطوب وثغرات XSS الناتجة عن علامات الاقتباس أو أقواس الزاوية غير المهرَّبة.
تكامل API الخلفية
أنشئ أجسام طلبات JSON تحتوي على نصوص مضمّنة تشتمل على أسطر جديدة أو جدولات أو علامات اقتباس. يمنع التهريب الصحيح صيغة JSON المعطوبة التي تُسبب أخطاء 400 من API المستقبِل.
DevOps والإعداد
اكتب نصوصاً مهرَّبة لملفات إعداد JSON أو heredocs في YAML أو متغيرات البيئة. شرطة مائلة عكسية في مكان خاطئ ضمن Dockerfile ENV أو Kubernetes ConfigMap قد تُفسد عملية النشر.
ضمان الجودة وبيانات الاختبار
أنشئ نصوص اختبار تحتوي على أحرف تحكم مضمّنة ومتواليات Unicode وعلامات اقتباس متداخلة. هذه النصوص الحدية ضرورية للتحقق من أن المحللات والمسلسلات تتعامل بشكل صحيح مع الأحرف الخاصة.
هندسة البيانات
نظّف البيانات المهرَّبة مضاعفاً من صادرات CSV أو مجمّعات السجلات أو تفريغات قواعد البيانات. الحقول التي تمر عبر طبقات تسلسل متعددة كثيراً ما تتراكم فيها شرطات مائلة عكسية زائدة تحتاج إلى إزالة.
التعلم والتنقيح
افحص كيف تُمثّل لغات مختلفة النص ذاته. يمكن للطلاب والمطورين الجدد مقارنة تهريب JavaScript وPython وJSON جنباً إلى جنب لفهم الفروق.
مرجع متواليات التهريب
يسرد الجدول أدناه متواليات التهريب الشائعة ومدى دعمها في JavaScript وPython وJSON. تشترك اللغات الثلاث في المجموعة الأساسية (السطر الجديد والجدولة والشرطة المائلة العكسية وعلامة الاقتباس المزدوجة)، لكنها تتباين في علامات الاقتباس المفردة وإيقاف hex والترميز الموسّع لـ Unicode.
المتتالية
المعنى
JavaScript
Python
JSON
\n
Newline (LF)
Yes
Yes
Yes
\r
Carriage return
Yes
Yes
Yes
\t
Tab
Yes
Yes
Yes
\\
Backslash
Yes
Yes
Yes
\"
Double quote
Yes
Yes
Yes
\'
Single quote
Yes
Yes
No
\b
Backspace
Yes
Yes
Yes
\f
Form feed
Yes
Yes
Yes
\v
Vertical tab
Yes
Yes
No
\0
Null character
Yes
Yes
No
\xNN
Hex byte
Yes
Yes
No
\uNNNN
Unicode (BMP)
Yes
Yes
Yes
\u{N..}
Unicode (full)
Yes
No
No
مقارنة تهريب JavaScript وPython وJSON
رغم اشتراك هذه الصيغ الثلاث في بناء الشرطة المائلة العكسية ذاته، تختلف في المتواليات الصالحة وطريقة التعامل مع الحالات الحدية. اختيار الوضع الخاطئ يُنتج مخرجات تبدو صحيحة لكنها تفشل وقت التحليل.
JavaScript
يدعم إيقاف \x الست عشري، و\u{...} لنطاق Unicode الكامل (خارج BMP)، و\v للجدولة الرأسية، و\0 للحرف الفارغ. يمكن تهريب علامتَي الاقتباس المفردة والمزدوجة. تُغني القوالب الحرفية (backticks) عن معظم احتياجات التهريب.
Python
متواليات أساسية مطابقة لـ JavaScript، بالإضافة إلى إيقاف \x الست عشري و\N{name} لأحرف Unicode المسمّاة. تُعطّل النصوص الخام (r"...") معالجة التهريب كلياً. يمكن تهريب علامتَي الاقتباس المفردة والمزدوجة.
JSON
الصيغة الأكثر تقييداً. الصالح فقط: \" (علامة اقتباس مزدوجة) و\\ و\/ و\n و\r و\t و\b و\f و\uNNNN. لا تهريب لعلامة الاقتباس المفردة (نصوص JSON تستخدم دائماً علامات الاقتباس المزدوجة). لا إيقاف hex ولا \v ولا \0. يجب أن يستخدم أي حرف تحكم (من U+0000 إلى U+001F) ترميز \uNNNN.
أمثلة برمجية
أمثلة لتهريب النصوص وإلغاء تهريبها في JavaScript وPython وGo وسطر الأوامر.
JavaScript
// Escape a string with special characters
const raw = 'Line 1\nLine 2\tTabbed "quoted"';
const escaped = JSON.stringify(raw);
// → '"Line 1\\nLine 2\\tTabbed \\"quoted\\""'
// Unescape a JSON string value
const input = '"Hello\\nWorld"';
const unescaped = JSON.parse(input);
// → "Hello\nWorld" (actual newline character)
// Template literals don't need quote escaping
const tpl = `She said "hello"`;
// → 'She said "hello"' — no backslashes needed
// Escape for use inside a RegExp
const query = 'price: $5.00 (USD)';
const safe = query.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
// → "price: \\$5\\.00 \\(USD\\)"
Python
# Escape with repr() — shows escape sequences
raw = "Line 1\nLine 2\t'quoted'"
print(repr(raw))
# → "Line 1\nLine 2\t'quoted'"
# Raw strings skip escape processing
path = r"C:\Users\name\Documents"
print(path)
# → C:\Users\name\Documents (backslashes kept literal)
# JSON escaping with json module
import json
data = 'He said "hello\nworld"'
escaped = json.dumps(data)
# → '"He said \\"hello\\nworld\\""'
# Unicode escaping
text = "Caf\u00e9" # → "Café"
print(text.encode('unicode_escape').decode())
# → "Caf\\xe9"
# Use $'...' syntax for escape sequences in bash
echo $'Line 1\nLine 2\tTabbed'
# → Line 1
# Line 2 Tabbed
# printf interprets escape sequences
printf 'Path: C:\\Users\\name\n'
# → Path: C:\Users\name
# Use jq to escape a string for JSON
echo 'He said "hello"' | jq -Rs .
# → "He said \"hello\"\n"
# Unescape JSON string with jq
echo '"Line 1\\nLine 2"' | jq -r .
# → Line 1
# Line 2
الأسئلة الشائعة
ما الفرق بين التهريب والترميز؟
التهريب يُضيف شرطات مائلة عكسية قبل الأحرف الخاصة داخل النص الحرفي لكي يعاملها المحلل اللغوي كبيانات لا كصياغة. أما الترميز فيُحوّل النص بأكمله إلى تمثيل مختلف — فمثلاً يُحوّل ترميز Base64 البيانات الثنائية إلى نص ASCII، ويستبدل ترميز URL الأحرف غير الآمنة بمتواليات نسبة-hex. التهريب يحافظ على قابلية القراءة؛ الترميز يُغيّر الصيغة بالكامل.
لماذا يحتوي نصي على شرطات مائلة عكسية مضاعفة (\\\\) بدلاً من شرطة واحدة؟
تظهر الشرطات المائلة العكسية المضاعفة حين يُهرَّب النص مرتين. يحدث هذا كثيراً حين تمر البيانات عبر طبقات تسلسل متعددة — مثلاً قيمة JSON مخزّنة داخل نص JSON آخر، أو سطر سجل جرى ترميزه بـ JSON قبل الكتابة في ملف. للإصلاح، ألغِ تهريب النص طبقة واحدة في كل مرة حتى تصل إلى المحتوى الأصلي.
كيف أهرّب نصاً لـ JSON في JavaScript؟
استخدم JSON.stringify(). تُحيط الدالة النص بعلامات اقتباس مزدوجة وتهرّب جميع الأحرف التي يتطلبها JSON: الشرطات المائلة العكسية وعلامات الاقتباس المزدوجة والأسطر الجديدة والجدولات وأحرف التحكم دون U+0020. إذا أردت المحتوى الداخلي فقط دون علامات الاقتباس المحيطة، استخدم JSON.stringify(str).slice(1, -1).
هل يمكن أن تحتوي نصوص JSON على علامات اقتباس مفردة؟
لا. تشترط مواصفة JSON (RFC 8259) أن تُحاط جميع النصوص بعلامات اقتباس مزدوجة. علامات الاقتباس المفردة ليست محدِّدات نص صالحة في JSON. وإن كانت بعض المحللات المتساهلة تقبلها، فإن أي محلل JSON متوافق مع المعيار سيرفض النص المحاط بعلامات اقتباس مفردة. أما إذا احتوى نصك على حرف اقتباس مفرد، فيمكن أن يظهر كما هو داخل JSON المحاط بعلامات مزدوجة دون الحاجة إلى تهريب.
ما هو النص الخام في Python؟
النص الخام (المسبوق بـ r، مثل r"C:\\Users\\name") يُخبر مفسر Python بمعاملة الشرطات المائلة العكسية كأحرف حرفية بدلاً من علامات تهريب. هذا مفيد لمسارات ملفات Windows والتعبيرات النمطية وأي نص يجب الحفاظ فيه على الشرطات المائلة العكسية. لاحظ أن النص الخام لا يمكن أن ينتهي بعدد فردي من الشرطات المائلة العكسية، إذ ستُهرّب الشرطةُ الأخيرةُ علامةَ الاقتباس الختامية.
كيف أهرّب أحرف Unicode في JavaScript؟
يدعم JavaScript صيغتين لتهريب Unicode. تتعامل صياغة \uNNNN مع الأحرف في المستوى متعدد اللغات الأساسي (من U+0000 إلى U+FFFF)، مثل \u00e9 لحرف 'e' بعلامة حادة. للأحرف خارج BMP (الرموز التعبيرية والنصوص النادرة)، استخدم \u{NNNNN} بحتى ستة أرقام hex — مثلاً \u{1F600} لرمز الوجه المبتسم. صيغة \u{'} أُدرجت في ES2015.
هل تهريب النصوص مرتبط بالأمان (XSS، حقن SQL)؟
التهريب على مستوى اللغة والتهريب الأمني يخدمان أغراضاً مختلفة، لكن الفكرة ذاتها: منع الأحرف الخاصة من تفسيرها ككود. للوقاية من XSS، تُهرّب كيانات HTML (< و> و&). لمنع حقن SQL، تستخدم استعلامات معلمة بدلاً من التهريب اليدوي. تتعامل هذه الأداة مع التهريب على مستوى اللغة (متواليات الشرطة المائلة العكسية)، لا تهريب HTML أو SQL.