ترميز URL وفك ترميزه
تحوّل هذه الأداة نص Unicode العادي إلى ترميز مئوي مطابق لمعيار RFC 3986، وتستعيد النص المقروء من القيم الصحيحة.
شغّل الأداة مجانًا
اختاروا الترميز عند نقل البيانات بأمان كمكوّن من URL، أو فك الترميز لفحص السجلات وعمليات إعادة التوجيه والاستعلامات والروابط المنسوخة. العملية حتمية ولا تحتفظ بحالة، وترفض التسلسلات التالفة بدلاً من إنتاج نتيجة مضللة. يمكنكم تشغيلها في المتصفح، أو استخدام السلوك نفسه عبر API بسعر $0.002 لكل عنصر.
متى يلزم استخدام الترميز المئوي
تخصّص عناوين URL محارف لبنيتها: تفصل الشرطات المائلة مقاطع المسار، وتبدأ علامة الاستفهام الاستعلام، وتفصل علامة العطف المعاملات، وتقسم علامة المساواة الأسماء عن القيم، وتبدأ علامة الشباك الجزء المرجعي. عندما يكون أحد هذه المحارف جزءاً من البيانات، يجب ألّا يختلط مع البنية. يحوّل الترميز الإدخال إلى UTF-8، ثم يمثّل كل بايت ليس من المحارف غير المحجوزة في RFC 3986 بعلامة نسبة مئوية ورقمين سداسيين عشريين. تبقى الحروف والأرقام والشرطات والنقاط والشرطات السفلية وعلامة التلدة مقروءة. تتحول المسافات إلى <code>%20</code> لا إلى علامة جمع، وتُرمّز علامات الترقيم المحجوزة لأن الإدخال قيمة واحدة لا عنواناً كاملاً. رمّزوا المكوّن المراد إدراجه فقط، لأن ترميز عنوان مكتمل سيغيّر فواصل بنيته أيضاً.
كيف يحمي فك الترميز الصارم بياناتكم
يفحص المفكّك الإدخال كاملاً قبل إرجاع أي قيمة. يجب أن يلي كل علامة نسبة مئوية رقمان سداسيان عشريان تماماً، ولذلك تؤدي <code>%</code> و<code>%2</code> و<code>%GG</code> إلى خطأ إدخال. بعد ذلك يجب أن تكوّن البايتات المرمّزة نص UTF-8 صالحاً. قد يبدو التسلسل معقولاً لكنه يمثّل نصاً تالفاً، وقبول محارف بديلة سيخفي التلف في سجل أو رد اتصال أو بيانات مستوردة، لذلك تُبلغ الأداة عن الخطأ. لا تحوّل علامة الجمع إلى مسافة؛ فهذه قاعدة خاصة بنماذج HTML، بينما تتبع هذه الأداة RFC 3986. وتنفّذ مروراً واحداً فقط، لذا تصبح <code>%2520</code> القيمة <code>%20</code> لا مسافة. اطلبوا مروراً ثانياً صراحةً حتى لا يحدث فك مزدوج غير مقصود.
استخدام النتيجة بأمان في التطبيقات
اختاروا الوضع بوضوح وأرسلوا السلسلة الدقيقة التي تمثّل قيمة منطقية واحدة. بعد الترميز لا تطبقوا مرمّز URL آخر، لأن الترميز المزدوج يحوّل كل علامة نسبة مئوية إلى <code>%25</code>. وبعد فك الترميز تعاملوا مع النص بوصفه بيانات، لا ترميزاً موثوقاً أو مسار ملف أو تعليمة. استعادة المحارف لا تتحقق من صلاحية معناها للوجهة التالية. يهم هذا الفرق في معاملات رد الاتصال والسجلات وتوحيد الروابط ومقارنة المعرّفات. لا تستخدم الخوارزمية شبكة أو عشوائية أو ساعة أو حالة محفوظة، لذلك تنتج المدخلات المتطابقة مخرجات متطابقة. يناسب المتصفح فحص قيمة منفردة، بينما تتيح API تحققاً قابلاً للتكرار في الاختبارات ومسارات المعالجة. تبلغ كلفة كل عنصر عبر API مقدار $0.002.
حالات الاستخدام
إعداد معامل استعلام
رمّزوا النص المدخل كي تبقى المسافات وعلامات العطف ومحارف Unicode والترقيم المحجوز ضمن قيمة واحدة.
فحص السجلات المرمّزة
فكّوا ترميز مسار أو معامل ملتقط لقراءة محتواه الأصلي واكتشاف تسلسلات الهروب التالفة.
اختبار سلوك التكامل
أنشئوا بيانات اختبار ثابتة وتحققوا من أن ردود الاتصال وإعادة التوجيه تفك طبقة RFC 3986 واحدة فقط.
الأسئلة الشائعة
ما تكلفة طلب API؟
تبلغ تكلفة كل عنصر عبر API مقدار $0.002. ويتوفر التنفيذ التفاعلي في الصفحة.
هل تبقى الشرطات المائلة وعلامات الاستفهام؟
لا. يُعامل الإدخال كقيمة واحدة، ولذلك تُرمّز علامات الترقيم المحجوزة أيضاً.
هل تُرمّز المسافات بعلامات جمع؟
لا. يمثّل RFC 3986 المسافة بالقيمة %20؛ أما تحويل علامة الجمع فيخص نماذج HTML.
ماذا يحدث مع تسلسل مئوي تالف؟
يعيد وضع الفك خطأً للتسلسلات الناقصة أو غير السداسية العشرية أو التي لا تكوّن UTF-8 صالحاً.
هل تفك الأداة الترميز أكثر من مرة؟
لا. ينفّذ كل طلب مروراً واحداً لتجنب الفك المزدوج الخفي؛ كرروا العملية فقط عندما يكون ذلك مقصوداً.
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/web/url-encode-decode \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"hello world/café?x=1","mode":"encode"}'const res = await fetch("https://api.kit.forhosting.com/web/url-encode-decode", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "hello world/café?x=1",
"mode": "encode"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/web/url-encode-decode",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "hello world/café?x=1",
"mode": "encode"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/web/url-encode-decode", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"hello world/café?x=1","mode":"encode"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"hello world/café?x=1","mode":"encode"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/web/url-encode-decode", 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é?x=1",
"mode": "encode"
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.url_encode_decode",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الحدود
timeout_sec | 30 |
max_crawl_pages | 25 |
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |