مرمّز نسبة مئوية RFC 3986
وفق القاعدة الصارمة في RFC 3986 يصبح hello world!'()* على الشكل hello%20world%21%27%28%29%2A، ولا يبقى دون تغيير إلا الحروف والأرقام والشرطة والنقطة والشرطة السفلية والمدة. وعند فك الترميز يتوقف عند أي تسلسل نسبة مئوية ناقص بدل اختلاق محارف. مجاني في متصفحك.
- مجاني
- يعمل في متصفحك
- دون تسجيل
- بياناتك لا تغادر جهازك
شغّل الأداة مجانًا
مثال محلول
- النص
- hello world!'()*
- وضع الحساب
- Encode
- النتيجة
- hello%20world%21%27%28%29%2A
- الطول
- 28
- الصيغة القياسية
- RFC 3986
- غير المحجوزة
- A-Z a-z 0-9 - . _ ~
يعرّف RFC 3986 قواعد URI الحديثة ومجموعة المحارف غير المحجوزة التي يجوز ظهورها دون ترميز نسبة مئوية: الحروف والأرقام والشرطة والنقطة والشرطة السفلية والمدة. تطبق هذه القدرة خريطة RFC 3986 الصارمة في الاتجاهين: encode يحوّل كل بايت UTF-8 غير غير-محجوز إلى %HH بأحرف كبيرة، وdecode يعيد النص الصريح مع فشل فوري عند تسلسلات النسبة المئوية الناقصة أو غير الست عشرية.
كيف يختلف ترميز النسبة المئوية RFC 3986 عن encodeURIComponent
يستبدل ترميز النسبة المئوية الثمانيات غير المسموحة بعلامة نسبة مئوية ورقمين ست عشريين حتى تنتقل السلسلة بأمان داخل مكوّن URI. يسمّي القسم 2.3 من RFC 3986 المجموعة غير المحجوزة—ALPHA وDIGIT والشرطة والنقطة والشرطة السفلية والمدة—ويبيّن أنه لا ينبغي ترميز هذه المحارف نسبة مئوية عند إنتاج البيانات. كل ثمانية أخرى، بما في ذلك gen-delims وsub-delims المحجوزة وجميع بايتات UTF-8 غير ASCII، ينبغي ترميزها عندما تُعامل القيمة كبيانات معتمة.
يستخدم encodeURIComponent في JavaScript مجموعة أوسع غير مُهرَّبة تُبقي أيضًا التعجب والفاصلة العليا والقوسين المفتوح والمغلق والنجمة كحروف حرفية. يوافق ذلك سلوك نماذج المتصفح التاريخي لكنه ينحرف عن ترميز المكوّن الصارم في RFC 3986 وعن مكتبات خادم كثيرة بلغة Python أو Go أو Java أو Rust لا تترك سوى العلامات الست غير المحجوزة. نمط الفشل العملي دقيق: قد يختلف تجزئة توقيع أو مفتاح ذاكرة تخزين مؤقت مبني من «hello!
world» إذا أصدر طرف hello! world والآخر hello%21world. يطبق هذا الأداة دائمًا خريطة RFC عند الترميز بأحرف hex كبيرة، فتصبح محارف متعددة البايت مثل café إلى caf%C3%A9 والمسافة إلى %20 بينما تصبح !
' ( ) * إلى %21 %27 %28 %29 %2A. يقبل decode أرقام hex كبيرة أو صغيرة، ويتحقق أن كل نسبة مئوية تتبعها بالضبط رقمان ست عشريان، ثم يعيد بناء نص UTF-8.
ما ترسلونه وما تستلمونه
أرسلوا حقل سلسلة إلزاميًا باسم text وحقل mode اختياريًا. وضع encode يهرّب النص نسبة مئوية وفق قاعدة غير المحجوزة في RFC 3986 ويعيد السلسلة المحوّلة في result. وضع decode يتحقق من كل تسلسل نسبة مئوية ثم يعكس الترميز ويعيد نص UTF-8 صريحًا في result.
إخفاقات التحقق لا تستهلك الرصيد المدفوع مسبقًا. تشمل الفحوصات الكلاسيكية ترميز عبارة فيها مسافات وعلامات تعجب لرؤية %20 و%21 جنبًا إلى جنب، وفك caf%C3%A9%21 إلى café!، ورفض سلسلة تنتهي بنسبة مئوية عارية أو تحتوي %ZZ.
أين يظهر الترميز الصارم RFC 3986 في العمل الفعلي
غالبًا تتطلب خدمات الخلفية التي تبني عناوين إعادة توجيه موقّعة أو سلاسل معاملات OAuth 1.0 أو طلبات HMAC قانونية ترميز نسبة مئوية يطابق RFC 3986 لا encodeURIComponent في المتصفح، لأن سلاسل أساس التوقيع تعامل ! ' ( ) * كمحارف يجب تهريبها. عادةً تحمل عملاء الجوال وسطح المكتب خارج منظومة JavaScript مكتبات تتبع بالفعل قاعدة غير المحجوزة فقط؛ ووسيط Node يستخدم encodeURIComponent للقيم نفسها سيُنتج إخفاقات توقيع متقطعة تظهر فقط عندما يحتوي عنوان منتج أو اسم عرض على فاصلة عليا أو قوس.
يلصق مهندسو الدعم سلاسل نصف مرمّزة من التذاكر والسجلات ويحتاجون مسار decode يفشل بوضوح عند تهريبات مقطوعة بدل اختراع محارف. يريد مؤلفو مناهج أسس الويب صفحة مخصّصة لترميز النسبة المئوية RFC 3986 مع مجموعة غير محجوزة صريحة بدل دفن الموضوع تحت مرمّز URL عام أو أداة Base64، لأن نية البحث وفرق !'() * هما ما يبحث عنه الطلاب والمكاملون.
يتحقق مهندسو التوطين من أن اللغات متعددة البايت تذهب وتعود دون mojibake. إذا احتجتم دلالات encodeURIComponent أو ترميز URI كاملًا خفيفًا يحفظ الفواصل البنيوية أو Base64 أو توليد slug، فاعاملوها كنيات بحث وصفحات هبوط منفصلة بدل إثقال صفحة مرمّز RFC 3986 هذه.
حالات الاستخدام
OAuth وسلاسل استعلام موقّعة
رمّزوا قيم المعاملات نسبة مئوية بمجموعة RFC 3986 غير المحجوزة الصارمة حتى تطابق سلاسل أساس HMAC وOAuth النظراء غير JavaScript الذين يهرّبون ! ' ( ) *.
فك أجزاء URI من السجلات أو اللصق
افكّوا أجزاءً مرمّزة نسبة مئوية من السجلات والتذاكر إلى UTF-8 مقروء، مع إخفاقات صارمة عند تسلسلات نسبة مئوية ناقصة أو غير ست عشرية.
الأسئلة الشائعة
ما الفرق عن encodeURIComponent؟
يترك encodeURIComponent ! ' ( ) * دون تهريب. تتبع هذه الأداة محارف RFC 3986 غير المحجوزة فقط (A–Z a–z 0–9 - . _ ~) وترمّز تلك sub-delims الأربعة نسبة مئوية إلى %21 %27 %28 %29 %2A.
هل يمكن الترميز والفك معًا؟
نعم. اضبطوا mode على encode (الافتراضي) لتهريب النص الصريح نسبة مئوية وفق RFC 3986، أو mode على decode لاستعادة نص UTF-8 من سلسلة مرمّزة نسبة مئوية.
هل أرقام hex عند الترميز كبيرة أم صغيرة؟
يُصدر encode أرقامًا ست عشرية كبيرة (%2A لا %2a)، الشكل المفضّل في RFC 3986. يقبل decode hex الكبير والصغير.
كيف تُرمَّز كلمة café بالنسبة المئوية؟
تصبح caf%C3%A9. فالحرف é يشغل أكثر من بايت في UTF-8، ويتحول كل بايت إلى علامة نسبة مئوية يتبعها رقمان ست عشريان بأحرف كبيرة. وعند فك الترميز تعود الكلمة café كما كانت.
لماذا يفشل توقيع OAuth عندما يحتوي الاسم على فاصلة عليا؟
غالبًا لأن طرفًا يترك الفاصلة العليا كما هي والطرف الآخر يكتبها %27، فتختلف السلسلة الموقّعة. إذا رمّزت القيمتين وفق RFC 3986 فستُرمَّز ! ' ( ) * دائمًا وينتج الطرفان النص نفسه.
أدوات ذات صلة
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/enc/url-rfc3986 \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"hello world!'\''()"}'const res = await fetch("https://api.kit.forhosting.com/enc/url-rfc3986", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "hello world!'()"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/enc/url-rfc3986",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "hello world!'()"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/enc/url-rfc3986", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"hello world!\'()"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"hello world!'()"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/enc/url-rfc3986", 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!'()"
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.url_rfc3986",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |
ملاحظات تقنية
كثير من الأدوات اليومية يتبع encodeURIComponent في JavaScript فيترك علامات التعجب والفواصل العليا والأقواس والنجوم دون تهريب عمدًا—وهي محارف يصنّفها RFC 3986 ضمن sub-delims وتتوقع البوابات الصارمة وموقّعو OAuth وعملاء HTTP متعددو اللغات رؤيتها غالبًا بصيغة %21 %27 %28 %29 %2A. استخدمها عندما ينص عقدكم على «ترميز نسبة مئوية وفق RFC 3986»، أو عندما يجب مطابقة نظير غير JavaScript يبقي علامات الترقيم الست غير المحجوزة فقط، أو عندما تحتاجون أداة متصفح مجانية وAPI مدفوعة تتفقان بايتًا ببايت على الدالة النقية نفسها. تسعير استدعاءات API الناجحة هو الأساس المنشور $0.002 لكل عنصر؛ ولا تُحسب إخفاقات التحقق.
كيف يختلف ترميز النسبة المئوية RFC 3986 عن encodeURIComponent
نسبة مئوية عارية في النهاية أو تسلسل مثل %G1 أو UTF-8 غير صالح بعد التوسيع تثير invalid_input برسالة موضع بدلًا من نفايات نصف مفكوكة. المسار عمل سلاسل نقي بلا شبكة وبلا بذور عشوائية وبلا ساعة حائط، لذا تنتج المدخلات المتطابقة دائمًا JSON متطابقًا. تسعير API الناجح هو الأساس المنشور $0.002 لكل عنصر.
ما ترسلونه وما تستلمونه
عند إغفال mode يكون encode هو الافتراضي فيبقى حمولة واحدة مفيدة. ترد الاستجابة mode والنص الأصلي، وتتضمن result وطول result، وتوسّم العقد بـ standard مضبوطًا على RFC 3986 وملخص unreserved قصير وalso_escaped يسرد محارف sub-delim الأربعة التي تميّز هذه الخريطة عن encodeURIComponent. غياب text والكائنات غير السلسلة وقيم mode غير المدعومة والسلاسل أطول من الحد الموثّق وتهريبات النسبة المئوية الناقصة وأرقام غير ست عشرية بعد النسبة المئوية وأخطاء المضيف عند UTF-8 مفكوك غير صالح تفشل كلها بـ invalid_input ورسالة إنجليزية واضحة. تسعير API الناجح هو الأساس المنشور $0.002 لكل عنصر، بما يوافق مرمّزات مستوى parse الأخرى في الكتالوج.
أين يظهر الترميز الصارم RFC 3986 في العمل الفعلي
ولأن هذه القدرة محرك parse نقي، فإن تسعير API هو الأساس المنشور $0.002 لكل عنصر ناجح ولا يستهلك التحقق الفاشل الرصيد.
حالات التكامل
قوالب golden عبر اللغات
ولّدوا متجهات ترميز وفك تتفق عليها مكتبات URL في Python وGo وJava وRust، بما في ذلك محارف sub-delim التي كثيرًا ما يتركها المتصفح حرفية.
أسئلة تقنية
ماذا يحدث إذا كان تسلسل النسبة المئوية معطوبًا؟
يفشل decode بـ invalid_input مع ذكر الموضع والتهريب السيئ (مثل % ناقص أو أرقام غير ست عشرية). لا تُحسب إخفاقات التحقق.
كم يكلف مرمّز النسبة المئوية RFC 3986؟
أداة المتصفح مجانية وتعمل محليًا. تستخدم طلبات API رصيد KIT المدفوع مسبقًا بسعر $0.002 لكل عنصر ناجح؛ ولا تُحسب المدخلات غير الصالحة.