مهرب تنسيق printf
تصبح «Progress: 50% complete» هي «Progress: 50%% complete»، فيطبع printf علامة النسبة بدل أن يعدّها بداية تحويل. وتُكتب فواصل الأسطر والجدولة والشرطات المائلة العكسية \n و\t و\\، ويعيدها إلغاء الهروب كما كانت. مجاني في متصفحك.
- مجاني
- يعمل في متصفحك
- دون تسجيل
- بياناتك لا تغادر جهازك
شغّل الأداة مجانًا
مثال محلول
- النص
- Progress: 50% complete next step
- وضع الحساب
- Escape
- النتيجة
- Progress: 50%% complete\nnext step
- الطول
- 34
- عدد علامات النسبة المئوية
- 1
- عدد التهريبات
- 1
تعامل سلاسل تنسيق عائلة printf علامة النسبة المئوية المفردة على أنها بداية مواصفة تحويل، لذلك فإن النص الحر الذي يحتوي نسبة مئوية—تسميات التقدم وملاحظات العملة وقوالب السجلات—سيتعطل أو يُحلل خطأ أو يستهلك الوسائط الخاطئة ما لم تُضاعَف كل نسبة حرفية إلى %%. وفي الوقت نفسه غالباً ما تعيش أجسام التنسيق داخل حرفيّات شفرة المصدر أو ملفات الإعداد حيث يجب كتابة أسطر جديدة وعلامات جدولة وشرطات مائلة عكسية كهروب بشرطة. يحوّل مهرب تنسيق printf هذا النص العادي إلى جسم تنسيق آمن بمضاعفة كل نسبة وإعادة كتابة أحرف التحكم والشرطات ك \\ و\n و\r و\t أو \xHH، ويعكس الخريطة نفسها عندما تحتاجون استعادة الأحرف الأصلية.
كيف تعمل مضاعفة النسبة المئوية وهروب الشرطة في printf
في printf بلغة C، وفي iostreams في C++ التي تقبل سلاسل بأسلوب printf، وفي تنسيق Python القديم ب %، وفي كثير من مكتبات التسجيل، يبدأ حرف النسبة تحويلًا: %s و%d و%.2f و%.*s والأشكال الموضعية مثل %1$s تبدأ كلها بنسبة مفردة. لطباعة نسبة حرفية يجب كتابة اثنتين متتاليتين—%%—فيُصدر المُنسّق % واحدة ولا يبحث عن حرف تحويل. نسيان هذه القاعدة خطأ كلاسيكي: رسالة مثل "done 50%" تصبح خطأ تنسيق أو تسرق الوسيط التالي.
تطبق هذه القدرة الطبقتين بشكل حتمي. في وضع escape تمر على كل حرف وتستبدل كل % ب %% وتحوّل الشرطات والتحكم المعتاد إلى أقصر هروب محمول وتترك النص القابل للطباعة العادي دون تغيير. في وضع unescape تطوي %% إلى نسبة واحدة وتوسّع متواليات الشرطة المدعومة وتترك نسبة مفردة (بداية تحويل حقيقي) كما هي لفك قوالب مختلطة، وترفض الشرطات النهائية ومتواليات \x الناقصة والأرقام غير السداسية وحروف الهروب المجهولة التي تكون غير معرّفة في قراءة صارمة.
ما الذي ترسلونه وما الذي تستلمونه
أرسلوا حقل سلسلة إلزامياً باسم text وحقلاً اختيارياً mode. يحوّل وضع escape النص العادي إلى جسم تنسيق آمن ل printf في result: تُضاعَف كل نسبة وتصير الشرطات \\ وأحرف التحكم \n أو \r أو \t أو \xHH. يعكس وضع unescape تلك المتواليات ويعيد السلسلة المستعادة في result.
إخفاقات التحقق لا تستهلك الرصيد المدفوع مسبقاً. تشمل الفحوصات الكلاسيكية تهريب سطر تقدم فيه نسبة مفردة وسطر جديد، وإلغاء تهريب جسم يستخدم %% و\t، والذهاب والإياب لسلسلة فيها شرطات مسبقاً، ورفض سلسلة تنتهي بشرطة عارية. استخدموا نموذج المتصفح المجاني للفحوصات السريعة وعروض الصف، ثم استدعوا العقد نفسه من سكربتات عند الحاجة لتوليد تجهيزات جماعي أو متجهات انحدار.
أين يبرر مهرب تنسيق printf مكانه
مولّدات الشفرة التي تصدر قوالب سجلات وفهارس تعريب ورسائل تحقق ل C أو C++ أو أزمنة تشغيل متوافقة مع printf يجب أن تهرّب كل حقل نص حر قبل كتابته في سلسلة تنسيق، وإلا فإن نسبة واحدة في اسم منتج تفسد التنسيق وتكسر البناء أو تتسبب في تعطل وقت التشغيل. فرق البرمجيات المضمنة وبرامج تشغيل الأجهزة تلصق تفريغات بروتوكول ورسائل مشغّل تحتوي مسبقاً %% ومتواليات \n وتحتاج مسار إلغاء تهريب يفشل بصوت عالٍ عند \xHH المقطوع بدل اختراع بايتات.
مواقع التوثيق وكتب الوصفات التي تعرض أمثلة printf للنسخ تحتاج مسار تهريب موثوقاً حتى تبقى عينات المستخدم أجسام تنسيق صالحة. فرق الدعم والأمن تقارن سلاسل تنسيق بمظهر ثنائي من السجلات بتجهيزات المصدر وتريد صفحة مخصصة لمضاعفة النسبة بأسلوب printf لا أداة سلاسل C عامة، لأن قاعدة النسبة هي نية البحث التي لا تركز عليها مهربات C وJavaScript. مسارات QA وCI تقارن متجهات ذهبية للهروب وإلغائه عبر المضيفات حتى تكون النسبة الحرفية دائماً %% والسطر الجديد دائماً \n.
مؤلفو المناهج الذين يدرّسون صيغة printf يريدون أمثلة تذكر مضاعفة النسبة صراحة، وهي نية البحث التي تلتقطها هذه الصفحة. إن احتجتم حرفيّات سلاسل C كاملة أو هروب JavaScript أو كيانات HTML أو ترميز URL بالنسبة، فتعاملوا معها كنوايا وصفحات منفصلة بدل إثقال صفحة مهرب تنسيق printf هذه.
حالات الاستخدام
أجسام تنسيق printf آمنة في الشفرة المولَّدة
هرّبوا العناوين وتسميات التقدم ورسائل المشغّل الحرة قبل كتابتها في سلاسل تنسيق بأسلوب printf حتى تصبح كل نسبة حرفية %%.
فك قوالب التنسيق من السجلات والتجهيزات
ألغوا تهريب أجسام بأسلوب printf تستخدم %% وهروب الشرطة إلى نص مقروء، مع إخفاقات صارمة عند متواليات ناقصة أو غير قانونية.
متجهات ذهبية لاختبارات وحدة سلاسل التنسيق
مرّروا رسائل عيّنة عبر الهروب وإلغائه ذهاباً وإياباً في CI حتى تبقى مضاعفة النسبة وهروب التحكم مستقرة عبر المضيفات وسلاسل الأدوات.
الأسئلة الشائعة
لماذا يحتاج printf إلى مضاعفة علامات النسبة المئوية؟
علامة % مفردة تبدأ تحويلاً مثل %s أو %d. كتابة %% تُصدر نسبة حرفية واحدة وتمنع المنسّق من استهلاك الوسائط أو الفشل لغياب تحويل.
هل يمكن الهروب وإلغاؤه معاً؟
نعم. اضبطوا mode على escape (الافتراضي) لترميز النص العادي إلى جسم آمن ل printf، أو mode على unescape لعكس مضاعفة النسبة وهروب الشرطة المدعوم.
ماذا يحدث لنسبة % مفردة عند إلغاء التهريب؟
تُترك كما هي حتى تبقى التحويلات الحقيقية مثل %s سليمة.
ماذا يحدث إذا كانت سلسلة الهروب تالفة؟
يتوقف إلغاء الهروب برسالة واضحة بدل التخمين. فالشرطة المائلة العكسية في النهاية، أو \x غير المكتملة، أو رقم ليس ست عشريًا، أو حرف مجهول بعد الشرطة، كلها تُرفض حتى لا يصل إلى النتيجة أي بايت ناقص.
ما المحارف التي تُكتب بصيغة هروب بالشرطة المائلة العكسية؟
تصبح الشرطة المائلة العكسية نفسها \\، وفاصل السطر \n، والعودة إلى بداية السطر \r، والجدولة \t. أما محارف التحكم الأخرى فتظهر على شكل \x مع رقمين ست عشريين، ويبقى النص العادي كما هو.
أدوات ذات صلة
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/enc/printf-escape \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Progress: 50% complete\nnext: %s"}'const res = await fetch("https://api.kit.forhosting.com/enc/printf-escape", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "Progress: 50% complete\nnext: %s"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/enc/printf-escape",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "Progress: 50% complete\nnext: %s"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/enc/printf-escape", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"Progress: 50% complete\\nnext: %s"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"Progress: 50% complete\nnext: %s"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/enc/printf-escape", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"text": "Progress: 50% complete\nnext: %s"
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.printf_escape",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |
ملاحظات تقنية
يفهم إلغاء التهريب %% والأشكال المدرجة بشرطة، ويترك علامات النسبة المفردة التي تبدأ تحويلات حقيقية مثل %s أو %d دون مساس، ويفشل فوراً ب invalid_input عند شرطة نهائية أو هروب سداسي ناقص أو حرف هروب مجهول بدل اختراع نفايات نصف مفكوكة.
كيف تعمل مضاعفة النسبة المئوية وهروب الشرطة في printf
على حدة، عندما تُضمَّن السلسلة نفسها في شفرة مصدر أو إعدادات شبيهة ب JSON، غالباً ما يكون السطر الجديد الخام غير قانوني أو مربكاً، لذا يكتب المؤلفون \n لتغذية السطر و\t للجدولة و\\ لشرطة مائلة عكسية واحدة وأحياناً \xHH لبايتات تحكم أخرى. المسار عمل سلاسل نقي بلا شبكة وبلا بذور عشوائية وبلا طوابع ساعة جدارية، فمدخلات متطابقة تنتج دائماً JSON متطابقاً. تسعير استدعاءات API الناجحة هو الأساس المنشور $0.002 لكل عنصر، وإخفاقات التحقق لا تستهلك الرصيد المدفوع مسبقاً.
ما الذي ترسلونه وما الذي تستلمونه
عند حذف mode يكون escape هو الافتراضي فيبقى الحمولة الواحدة مفيدة. تُعيد الاستجابة mode وtext الأصلي ثم تشمل result وطول result وpercent_count (كم نسبة ضُوعفت عند الهروب أو فُكّت عند إلغائه بما في ذلك الشكل الاختياري \%) وescape_count (كم تحويلاً بأسلوب الشرطة طُبّق). غياب text والكائنات غير السلسلة وقيم mode غير المدعومة والسلاسل الأطول من الحد الموثّق والشرطات النهائية وهروب hex الناقص والأرقام غير السداسية بعد \x وحروف الهروب المجهولة تفشل ب invalid_input ورسالة إنجليزية واضحة. تسعير API عند النجاح هو الأساس المنشور $0.002 لكل عنصر.
أين يبرر مهرب تنسيق printf مكانه
ولأن هذه القدرة محرك تحليل نقي فإن تسعير API هو الأساس المنشور $0.002 لكل عنصر ناجح والتحقق الفاشل لا يستهلك الرصيد.
أسئلة تقنية
ماذا يحدث إذا كانت متوالية الهروب مشوّهة؟
يفشل unescape ب invalid_input مع ذكر الموضع والمتوالية السيئة (مثلاً شرطة نهائية أو \xHH ناقص أو حرف هروب مجهول). لا تُحسب رسوم على إخفاقات التحقق.
كم التكلفة؟
أداة المتصفح مجانية وتعمل محلياً. طلبات API تستخدم رصيد KIT المدفوع مسبقاً بمقدار $0.002 لكل عنصر ناجح؛ والإدخال غير الصالح لا يُحسب.