الأدوات
الأدلة

تهريب / إلغاء تهريب سلاسل JSON

JSON

تهريب وإلغاء تهريب سلاسل JSON — علامات الاقتباس وأحرف التحكم و \uXXXX.

100% من جهة العميل بدون خادم خلفي
الإدخال
الإخراج
في هذه الصفحة

ما هو تهريب سلاسل JSON؟#

داخل مستند JSON، يجب أن تجلس السلسلة بين علامتي تنصيص مزدوجتين — وهذا يُنشئ مشكلة لحظة احتواء النص نفسه على علامة اقتباس، أو سطر جديد، أو شرطة مائلة عكسية. لو أ_dropتها خامًا، لرأى المحلّل علامة الإغلاق مبكرًا، أو لاعتبر \ بداية تهريب لا يفهمه. التهريب هو فعل استبدال هذه المحارف بالتسلسلات القصيرة ذات الشرطة المائلة العكسية التي يحدّدها مواصفة JSON: \" لعلامة الاقتباس، \\ للشرطة المائلة العكسية، \n لسطر جديد، \t لعلامة تبويب، وقليل غيرها. إلغاء التهريب هو العكس — تحويل تلك التسلسلات إلى المحارف الأصلية.

هناك وضعٌ ثانٍ أشَدّ. بعض الأنظمة القديمة — مُمرِّرات سجلات قديمة، أو قواعد بيانات مُقيِّدة، أو طبقات نقل تفترض ASCII خالصًا — تختنق عند أي بايت فوق 127. من أجلها، يتيح JSON أيضًا كتابة أي محرف غير ASCII على شكل \uXXXX (والمحارف النجمية كالإيموجي على شكل زوج بديل UTF-16). يبقى النص JSON صالحًا؛ لكنه يصير مكوّنًا من ASCII بالكامل بعد التهريب.

تقوم هذه الصفحة بكلا الاتجاهين وكلا الوضعين: تهريب سلسلة خام إلى مُحدَّد سلسلة JSON صالح، أو إلغاء تهريب المُحدَّد إلى نصه الأصلي — مع مفتاح إخراج ASCII فقط (\uXXXX) اختياري يُجبِر كل نقطة رمز غير ASCII على صيغة \uXXXX.

كيفية الاستخدام#

  1. اختر الاتجاه عبر مفتاح ترميز / فك الترميز أعلى يسار شريط الأدوات. يُهرِّب “ترميز” النص الخام إلى مُحدَّد JSON؛ ويُلغي “فك الترميز” تهريب المُحدَّد إلى نص.
  2. اكتب أو الصق في لوحة الإدخال على اليسار.
    • في ترميز، يصير النص كله مُحدَّد سلسلة JSON واحدًا (بما في ذلك علامتا الاقتباس المحيطتان).
    • في فك الترميز، يمكنك لصق مُحدَّد بموجداتين ("a\nb") أو الجسم المهرب المجرد (a\nb) — ستُغلِّفه الأداة بعلامتي اقتباس نيابةً عنك. ويُرفض رقم JSON أو منطقي أو كائن صالح على أنه “ليس سلسلة” بدلًا من إكراهه بصمت.
  3. فعِّل إخراج ASCII فقط (\uXXXX) (وضع ترميز) حين لا يستطيع المُستهلِك النهائي التعامل مع بايتات غير ASCII. تُصدَر المحارف النجمية كالإيموجي كزوج بديل صحيح، تمامًا كما يفعل JSON.stringify.
  4. تظهر النتيجة حيًّا في لوحة الإخراج. انقر نسخ لأخذها.
  5. يُدرِج مثال سلسلة تجريبية متعددة اللغات؛ ويعيد مسح ضبط اللوحتين.

الميزات الرئيسية#

  • صيغ قصيرة مطابقة للمواصفة. يستخدم التسلسلات المطلوبة تحديدًا وفق RFC 8259 (\"، \\، \b، \f، \n، \r، \t) و\uXXXX لكل ما دون 0x20 — مطابقًا JSON.stringify بايتًا ببايت.
  • وضع ASCII فقط حقيقي. لا تُحذف المحارف غير ASCII بصمت ولا تُفسَّد؛ كلٌّ منها يُصدَّر كـ \uXXXX، والمحارف النجمية (فوق U+FFFF) تصير زوجًا بديلًا صحيحًا لـ UTF-16، لا وحدة رمز وحيدة مكسورة سيرفضها المُفكِّكون.
  • إلغاء تهريب متسامح. يقبل كلًّا من المُحدَّد الكامل المُحاط بعلامات اقتباس والجسم المهرب المجرد، فتُفكَّر الأجزاء المنسوخة نصفياً من سطر سجل بدلًا من رمي خطأ.
  • يرفض التخمين. إن كانت المدخلات المُفكَّكة JSON صالحًا لكنها ليست سلسلة (مثلًا رقم مجرد أو مصفوفة)، فإن الأداة تخبرك بدلًا من تحويلها إلى سلسلة خلف ظهرك.

مثال عملي#

حمِّل مثال في وضع ترميز فتكون المدخلات سلسلةً تخلط علامات اقتباس، ومسارًا بشرطات مائلة عكسية، وسطرًا جديدًا، وعلامة حق نشر، وإيموجي، وصينية:

He said "hi"
\path\ © 🌍 你好

دون ASCII فقط، يحتفظ المُحدَّد المهرب بالمحارف المقروءة حرفيًّا ولا يضع علامات الاقتباس إلا لما يجب وضعه:

"He said \"hi\"\n\\path\\ © 🌍 你好"

الآن فعِّل إخراج ASCII فقط (\uXXXX) فتصير المدخلات نفسها ASCII خالصًا — تنهار علامة حق النشر إلى الصيغة ذات الأربعة محارف \u00a9، وإيموجي الكرة الأرضية إلى الزوج البديل \ud83c\udf0d، وكل محرف صيني إلى نقطة رمزه (\u4f60، \u597d):

"He said \"hi\"\n\\path\\ \u00a9 \ud83c\udf0d \u4f60\u597d"

بدِّل إلى فك الترميز وألصق أيًّا من المُحدَّدين: يُستعاد النص الأصلي — بما في ذلك الإيموجي والصينية — بدقة تامة.

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

لماذا يتحول الإيموجي إلى رمزَي \u بدلًا من واحد؟#

المحارف فوق U+FFFF (الإيموجي، امتدادات CJK النادرة، بعض الرموز الرياضية) لا تتسع لوحدة رمز واحدة بـ 16 بت، فيمثّلها UTF-16 كـ زوج بديل — بديل علوي يتبعه بديل سفلي. إيموجي الكرة الأرضية 🌍 (U+1F30D) يصير \ud83c\udf0d. إصدار \u واحد فقط سيُنتج JSON غير صالح يرفضه المُفكِّكون الصارمون؛ وتُصدِر هذه الأداة الزوج تمامًا كما يفعل JSON.stringify، فيتِح ذهابًا وإيابًا.

يقول فك الترميز: المدخلات ليست سلسلة JSON. ماذا ألصقت؟#

ألصقتَ شيئًا هو JSON صالح لكنه ليس سلسلة — عادةً رقم مجرد (42)، أو منطقي (true)، أو كائن/مصفوفة. ترفض الأداة تحويله إلى سلسلة لأن ذلك يُخفي خطأً حقيقيًّا (فأنت تقريبًا قصدت لصق قيمة السلسلة، لا المستند كله). أحِط نصك بعلامتي اقتباس وأعد المحاولة.

هل يتعامل مع محارف التحكم كعلامة التبويب الحرفية أو الجرس؟#

نعم. علامة تبويب حرفية في المدخلات تصير \t، وحذف للخلف \b، وتغذية الورقة \f، وإرجاع السيرة \r؛ وأي رمز تحكم آخر دون U+0020 (بما في ذلك الجرس، 0x07) يصير رمزًا على شكل . هذا يهم لأن محارف التحكم الخام غير قانونية داخل سلاسل JSON وترفضها بعض المحلّلات تمامًا.

هل إخراج ASCII فقط “أكثر أمانًا”؟#

فقط لنوع محدد من الأمان: النجاة عبر طبقة نقل تُتلف أو ترفض البايتات غير ASCII. وليس إجراء أمنيًّا — فالبيانات قابلة للعكس بوضوح، معبَّرًا عنها بأبجدية أكثر تقييدًا فحسب. استخدمه حين يطلب المُستهلِك ASCII؛ وأوقفه فيما عدا ذلك، لأن الصيغة المقروءة أسهل بكثير في التنقيح.