مرمّز وفاكك النسبة المئوية URL
تصبح hello world & café هي hello%20world%20%26%20caf%C3%A9، جاهزة لوضعها في رابط. اختر ترميز قيمة واحدة تُرمَّز فيها أيضًا & = ? /، أو عنوان كامل يحتفظ بالنقطتين والشرطات المائلة وعلامة الاستفهام. والفك يعكس ذلك. مجاني في متصفحك.
- مجاني
- يعمل في متصفحك
- دون تسجيل
- بياناتك لا تغادر جهازك
شغّل الأداة مجانًا
مثال محلول
- النص
- hello world & café
- وضع الحساب
- Encode
- النتيجة
- hello%20world%20%26%20caf%C3%A9
- الطول
- 31
- الملف
- component
- المعيار
- encodeURIComponent / decodeURIComponent
ومن دونه، تُقسّم عبارة بحث ذات فراغات الاستعلام، ويتلف عنوان بريد إلكتروني ذو أحرف مشكولة رابط mailto، ويبدو اسم منتج فيه شرطة مائلة كمسار جديد. اختر وضع المكوّن عندما ترمّز قيمة معامِل واحدة، أو وضع URI الكامل عندما تحتاج بقاء الفواصل البنيوية مثل النقطتين والشرطة المائلة وعلامة الاستفهام سليمة.
كيف يعمل ترميز النسبة المئوية وملفا URL
ترميز النسبة المئوية، المعرف للويب في معايير URI التي تتبعها المتصفحات ووثيقة RFC 3986، يستبدل كل بايت غير مسموح به في سياق معين بعلامة نسبة مئوية ورقمين ست عشريين. وبالنسبة إلى نص UTF-8 تصبح المحارف متعددة البايتات عدة مجموعات %HH متتالية، فيتحول café إلى caf%C3%A9 والفراغ العادي إلى %20. ويبرز ملفان شائعان في العمل اليومي.
ملف المكوّن يطابق encodeURIComponent: يهرب كل شيء تقريبًا ليس محرفًا غير محجوز، بما فيه الفواصل المحجوزة مثل علامة العطف وعلامة التساوي وعلامة الاستفهام والشرطة المائلة والنقطتين. وهذا ما تريده عندما تكون السلسلة قيمة معامِل استعلام واحدة أو مقطع مسار واحدًا يجب ألا يُؤخذ خطأً على أنه بنية. أما ملف URI الكامل فيطابق encodeURI: ما يزال يهرب الفراغات والمحارف غير ASCII، لكنه يترك الترقيم البنيوي بحاله بحيث يمكن تطبيع عنوان كامل مثل https://example.com/path?
فكّ الترميز يعكس الخريطة. وقبل تشغيل فكّ الترميز المضيف، تفحص هذه القدرة الإدخال بحثًا عن تسلسلات تهريب سليمة البناء: يجب أن تتبع كل علامة نسبة مئوية رقمان ست عشريان تمامًا.
ما ترسله وما يعود إليك
أرسل الحقل النصي الإلزامي text والحقلين الاختياريين mode وcomponent. يهرب الوضع encode النص بالنسبة المئوية وفق الملف المحدد ويعيد السلسلة المحولة في result. أما الوضع decode فيتحقق من كل تسلسلة نسبة مئوية ثم يعكس الترميز ويعيد نص UTF-8 صريحًا في result.
قيمة component الافتراضية true لملف المكوّن الصارم؛ واضبطها على false لملف URI الكامل الذي يحفظ الفواصل البنيوية. تعكس الاستجابة mode وcomponent والنص الأصلي text وresult وطول result وتسمية ملف قصيرة component أو uri وتسمية standard تسمي دوال JavaScript المدمجة المطابقة كي يتمكن العملاء من التأكد من العقد الذي أصابوه. لا تستهلك إخفاقات التحقق الرصيد المدفوع مسبقًا.
تشمل الفحوص التقليدية ترميز hello world بفراغ وعلامة عطف في وضع المكوّن، وفكّ caf%C3%A9 إلى café، وترميز عنوان URL كامل مع component بقيمة false كي ينجو المخطط وفواصل الاستعلام، ورفض سلسلة تنتهي بعلامة نسبة مئوية مجردة. وصِل نموذج المتصفح المجاني للفحوص السريعة وعروض الفصول، ثم استدعِ العقد نفسه من النصوص عندما تحتاج تحضير معامِلات مجمعة أو عينات اختبار رجعي.
أين يظهر ترميز النسبة المئوية URL في العمل الفعلي
يجب على الخدمات الخلفية التي تجمع أهداف إعادة التوجيه وعناوين الاستدعاء الرجعي في OAuth ومسارات العودة الموقعة أن ترمّز كل قيمة معامِل على حدة كي لا تخترع علامة عطف داخل عنوان منتج حقل استعلام ثانيًا. وتحتاج تطبيقات الواجهة الأمامية التي تبني روابط البحث والتصفية من مربعات نص حر إلى ترميز المكوّن لكل قيمة مع إبقاء قالب المسار دون مساس.
وتعتمد قوالب البريد الإلكتروني والرسائل القصيرة التي تضمن روابط عميقة بأسماء مستخدمين أو وسوم حملات أو عناوين Unicode على ترميز النسبة المئوية كي لا تعيد شركات الاتصال والعملاء تغليف href أو إتلافه. تلصق فرق الدعم سلاسل نصف مرمزة من التذاكر وتحتاج مسار فكّ يفشل بصوت عالٍ عند تسلسلات % المبتورة بدلًا من اختراع محارف. ويتحقق مهندسو التعريب من أن اللغات متعددة البايتات تكمل الرحلة ذهابًا وإيابًا عبر الترميز والفكّ دون تشوه.
ويريد مؤلفو المناهج الذين يدرّسون أسس الويب صفحة مخصصة واحدة لترميز النسبة المئوية بملفي المكوّن وURI الكامل بدلًا من دفن الموضوع تحت أداة Base64 أو slugs عامة، لأن قصد البحث وقواعد المحارف المحجوزة مختلفة. وإذا احتجت Base64 أو Base32 أو توليد slugs أو تجميع UTM أو التحقق الكامل من بنية URL، فعامل تلك بوصفها أغراض بحث وصفحات مستقلة بدلًا من إثقال صفحة مرمّز النسبة المئوية هذه.
حالات الاستخدام
قيم معامِلات استعلام آمنة
رمّز كل مرشح أو عبارة بحث أو اسم منتج بالنسبة المئوية في وضع المكوّن كي لا تُقسّم المحارف المحجوزة سلسلة الاستعلام أو تعيد كتابتها أبدًا.
فكّ عناوين URL ملصوقة أو مسجلة
افكّ مقاطع مرمزة بالنسبة المئوية من السجلات والتذاكر إلى نص مقروء، مع إخفاقات صارمة عند تسلسلات النسبة المئوية الناقصة أو غير الست عشرية.
تطبيع خفيف لعنوان URL كامل
رمّز عنوانًا كاملًا مع component بقيمة false كي تهرب الفراغات والمحارف غير ASCII بينما تبقى فواصل المخطط والمسار والاستعلام سليمة.
الأسئلة الشائعة
ما الفرق بين component بقيمة true وfalse؟
القيمة true تعتمد دلالات encodeURIComponent وتهرب الفواصل المحجوزة مثل & = ? / : كي تكون القيمة الواحدة آمنة داخل معامِل أو مقطع مسار. والقيمة false تعتمد دلالات encodeURI وتحفظ ترقيم URL البنيوي مع استمرار تهريب الفراغات والمحارف غير ASCII.
هل يمكن الترميز والفكّ معًا؟
نعم. اضبط mode على encode (الافتراضي) لتهريب النص الصريح بالنسبة المئوية، أو على decode لاسترجاع النص من سلسلة مرمزة بالنسبة المئوية.
هل يغني هذا عن بناء كائن URL كامل؟
لا. إنه يحوّل النص فقط بقواعد ترميز النسبة المئوية. اجمع المخطط والمضيف والمسار والاستعلام بنفسك، مرمّزًا كل قيمة بملف المكوّن عند الحاجة.
ماذا يحدث إذا كان تسلسل النسبة المئوية مكسورًا؟
يتوقف الفك برسالة واضحة تحدد موضع المشكلة. فعلامة % منفردة في النهاية، أو تسلسلات مثل %G1 أو %2، تُرفض بدل فكها جزئيًا، حتى لا يتحول خطأ اللصق إلى نص مختلف.
لماذا تصبح café هي caf%C3%A9؟
لأن النص يتحول أولًا إلى بايتات UTF-8، والحرف é يشغل بايتين. وكل بايت غير مسموح به في URL يصبح علامة نسبة مئوية يتبعها رقمان ست عشريان، فالمسافة مثلًا تصبح %20.
أدوات ذات صلة
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/enc/url \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"hello world & café"}'const res = await fetch("https://api.kit.forhosting.com/enc/url", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "hello world & café"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/enc/url",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "hello world & café"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/enc/url", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"hello world & café"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"hello world & café"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/enc/url", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"text": "hello world & café"
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.url",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |
ملاحظات تقنية
يحوّل ترميز النسبة المئوية في URL الفراغات وعلامات العطف والأحرف غير ASCII وسائر المحارف المحجوزة أو غير الآمنة إلى صيغة %HH قابلة للنقل، بحيث تنجو سلاسل الاستعلام ومقاطع المسارات ومعامِلات الاستدعاء الرجعي أثناء عبورها المتصفحات والوكلاء وواجهات API. تطبق هذه القدرة القواعد نفسها التي يوفرها JavaScript باسم encodeURIComponent وencodeURI: يهرب وضع encode المحارف التي يتطلبها ملفك، ويعيد وضع decode النص الصريح، وتفشل أي تسلسلة نسبة مئوية معيبة فورًا بخطأ invalid_input بدلًا من إرجاع بيانات نصف مفكوكة.
كيف يعمل ترميز النسبة المئوية وملفا URL
x=1 تطبيعًا خفيفًا دون إتلاف هيكل المخطط أو المسار أو الاستعلام. إن علامة نسبة مئوية منفردة في النهاية، أو تسلسلات مثل %G1 أو %2، ترفع invalid_input مع الموضع وشرح موجز. هذا الفحص الصارم مقصود؛ فالقبول الصامت يُخفي أخطاء اللصق وينتج نتائج مختلفة عبر اللغات التي تختلف في معاملة التهريبات المعطوبة. المسار عمل سلاسل نقي بلا شبكة ولا بذور عشوائية ولا طوابع زمنية، لذا تنتج المدخلات المتطابقة دائمًا JSON متطابقًا. تسعير استدعاءات API الناجحة هو القاعدة المنشورة $0.002 لكل عنصر، ولا تستهلك إخفاقات التحقق الرصيد المدفوع مسبقًا.
ما ترسله وما يعود إليك
عند إغفال mode يكون encode هو الافتراضي بحيث تؤدي الحمولة المفردة عملًا مفيدًا. إن غياب text أو الكائنات غير النصية أو قيم mode غير المدعومة أو القيم التي لا يمكن تأويلها منطقيًا لحقل component أو السلاسل الأطول من الحد الموثق أو تسلسلات النسبة المئوية الناقصة أو الأرقام غير الست عشرية بعد علامة النسبة المئوية أو أخطاء URI على مستوى المضيف عند فكّ UTF-8 غير الصالح، كلها تفشل بخطأ invalid_input ورسالة إنجليزية واضحة. تسعير API الناجح هو القاعدة المنشورة $0.002 لكل عنصر.
أين يظهر ترميز النسبة المئوية URL في العمل الفعلي
ولأن هذه القدرة محرك parse نقي، فإن تسعير API هو القاعدة المنشورة $0.002 لكل عنصر ناجح ولا يستهلك التحقق الفاشل الرصيد.
أسئلة تقنية
ماذا يحدث إذا كانت تسلسلة النسبة المئوية معيبة؟
يفشل الفكّ بخطأ invalid_input مع ذكر الموضع والتسلسلة المعيبة (مثل % ناقصة أو أرقام غير ست عشرية). ولا يُحتسب شيء عن إخفاقات التحقق.
كم التكلفة؟
أداة المتصفح مجانية وتعمل محليًا. أما طلبات API فتستخدم رصيد KIT المدفوع مسبقًا بقيمة $0.002 لكل عنصر ناجح؛ ولا يُحتسب الإدخال غير الصالح.