إزالة علامات التشكيل من نص يونيكود
تزيل هذه الأداة علامات التشكيل المركبة من نص Unicode بعد تطبيق التفكيك القانوني. تتحول الحروف ذات العلامات مثل é وñ وü إلى حروفها الأساسية، بينما تبقى علامات الترقيم والمسافات والرموز وحالة الأحرف وأنظمة الكتابة الأخرى دون تغيير.
شغّل الأداة مجانًا
تصلح النتيجة عندما يحتاج فهرس بحث أو معرّف أو اسم ملف أو مسار URL مختصر إلى صيغة لا تميز بين الحروف بحسب العلامات، من دون تطبيق نقل صوتي واسع أو قواعد إملائية خاصة بلغة معينة. المعالجة حتمية ومحصورة في الطلب، وتعيد قيمة نصية بسيطة يمكنكم نسخها أو تمريرها مباشرة إلى مرحلة تطبيع أخرى.
ما الذي ينفذه هذا التحويل؟
يتيح Unicode تمثيل كثير من الحروف ذات العلامات بأكثر من طريقة. فقد يُخزَّن حرف مثل é كنقطة ترميز واحدة مركبة مسبقًا، أو على هيئة الحرف الأساسي e متبوعًا بعلامة نبرة حادة مركبة. لا تكشف المقارنة البصرية وحدها أي التمثيلين موجود. تطبق هذه القدرة أولًا التفكيك القانوني في Unicode، المعروف عادة باسم NFD، لكي تعبّر عن الحروف القابلة للتفكيك القانوني بحروف أساسية تتبعها علاماتها. ثم تزيل المحارف التابعة لجميع فئات العلامات في Unicode. وبذلك تصبح أمثلة مثل café وpiñata وÅngström على صورة cafe وpinata وAngstrom. لا تحوّل الأداة النص إلى أحرف صغيرة، ولا تدمج المسافات، ولا تحذف علامات الترقيم، ولا تستبدل الرموز. كما أنها لا تَعِد بنقل كامل إلى ASCII؛ فالحروف التي لا تملك تفكيكًا قانونيًا، مثل ł، تبقى كما هي. هذا النطاق المحدد مقصود، إذ يمنحكم عملية تطبيع متوقعة يمكن دمجها مع قواعد مستقلة لحالة الأحرف أو الترقيم أو تنسيق المسارات المختصرة، من غير إخفاء تحويلات إضافية داخل عملية واحدة.
إنشاء مفاتيح بحث ومسارات مختصرة ثابتة
يعمل البحث الذي لا يميز العلامات على نحو أفضل غالبًا عند حفظ القيمة الأصلية ومفتاح مطبّع بصورة منفصلة. احتفظوا بالتهجئة الأصلية للعرض، ثم مرروا النص إلى هذه القدرة لإنتاج حقل للمقارنة. ويمكن تطبيق المعالجة نفسها على عبارة البحث قبل المطابقة، بحيث يجد من يكتب cafe الكلمة café مع بقاء التسمية الصحيحة بعلاماتها في النتائج. تستطيع سلاسل إنشاء المسارات المختصرة استعمال الناتج في مرحلة مبكرة: أزيلوا العلامات أولًا، ثم حوّلوا الأحرف إلى الحالة المطلوبة، واستبدلوا المسافات، وطبقوا سياسة الترقيم الخاصة بالمشروع. ترتيب الخطوات مهم لأن التفكيك يكشف العلامات التي كانت ستظل ملتصقة بالحروف المركبة مسبقًا. العملية حتمية؛ لذلك ينتج الإدخال نفسه في Unicode المخرج نفسه دائمًا، ويمكن استعماله بأمان في مفاتيح التخزين المؤقت أو في إعداد بيانات قابل للتكرار. غير أن التطبيع لا يحل محل الترتيب والمقارنة المراعيين للغة. تختلف اللغات في اعتبار الحروف ذات العلامات أشكالًا للحرف نفسه أو حروفًا مستقلة؛ لذا احتفظوا بالنص الأصلي واختاروا المطابقة من دون علامات فقط عندما تناسب المنتج ومستخدميه.
الحدود وأنظمة الكتابة وطرق التحقق
تشمل قاعدة الإزالة العلامات المركبة في Unicode كله، ولا تقتصر على نطاق العلامات المألوف في لغات أوروبا الغربية. يمنح ذلك اتساقًا تقنيًا، لكنه قد يُحدث أثرًا كبيرًا في أنظمة كتابة تحمل فيها العلامات معلومات أساسية. اختبروا محتوى ممثلًا لكل لغة يقبلها تطبيقكم قبل استخدام النتيجة في البحث أو التوجيه أو حقول الهوية. وقد تُحذف أيضًا محددات تنوع الرموز التعبيرية ومحارف أخرى مصنفة ضمن العلامات، ولذلك ينبغي التعامل مع الناتج كمفتاح مطبّع لا كنسخة مثالية للعرض. يختلف التفكيك القانوني عمدًا عن تفكيك التوافق؛ فلا تُبسّط الأشكال الزخرفية أو التوافقية بصورة عامة، ولا تدّعي الأداة أنها ناقل صوتي شامل. للتحقق، قارنوا بين الصيغة المركبة مسبقًا والصيغة المفككة للعينة نفسها، وتأكدوا من تطابق النتيجتين. وأدرجوا في الاختبارات علامات الترقيم والنصوص غير اللاتينية والرموز التعبيرية والحروف التي لا تملك تفكيكًا. تكشف هذه الحالات ما إذا كانت العملية المحددة كافية، أم أن سلسلة المعالجة تحتاج إلى مراحل تطبيع إضافية تختارونها بوضوح.
حالات الاستخدام
إنشاء مفاتيح بحث لا تميز العلامات
احفظوا قيمة مطبّعة مرافقة كي تعثر عبارات البحث الخالية من العلامات على الأسماء والمصطلحات المكتوبة بصورة صحيحة.
إعداد النص لمسارات URL المختصرة
حوّلوا الحروف ذات العلامات القابلة للتفكيك إلى صورها الأساسية قبل تطبيق قواعد حالة الأحرف والفواصل والترقيم.
مقارنة تمثيلات Unicode البديلة
طبّعوا الصيغ المركبة مسبقًا والصيغ التي تستخدم علامات مركبة إلى تمثيل الحروف الأساسية نفسه لإجراء مقارنة حتمية.
الأسئلة الشائعة
ما الذي تزيله هذه القدرة؟
تطبق التفكيك القانوني في Unicode وتحذف المحارف التابعة لفئات العلامات في Unicode، بما فيها علامات التشكيل المركبة.
هل تحوّل النص كله إلى ASCII؟
لا. تبقى المحارف التي لا تملك تفكيكًا قانونيًا إلى حروف أساسية، كما تبقى علامات الترقيم والرموز والحروف التابعة لأنظمة كتابة أخرى.
هل تغيّر حالة الأحرف أو تنشئ مسارًا مختصرًا كاملًا؟
لا. يجب تنفيذ تغيير حالة الأحرف واستبدال المسافات وتصفية الترقيم وقواعد الفواصل في خطوات لاحقة وصريحة.
هل تعطي العلامات المركبة مسبقًا والمفككة النتيجة نفسها؟
نعم. يحدث التفكيك القانوني قبل إزالة العلامات، لذلك تُبسَّط é المركبة مسبقًا وe المتبوعة بعلامة النبرة الحادة على نحو متسق.
ما تكلفة طلب API؟
تكلفة كل طلب API هي $0.002. ويمكن تشغيل التحويل أيضًا في منفذ المتصفح المُنشأ لأنه لا يحتاج إلى شبكة أو حالة على الخادم.
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/str/remove-diacritic-marks \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Crème brûlée — déjà vu in São Paulo"}'const res = await fetch("https://api.kit.forhosting.com/str/remove-diacritic-marks", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "Crème brûlée — déjà vu in São Paulo"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/str/remove-diacritic-marks",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "Crème brûlée — déjà vu in São Paulo"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/str/remove-diacritic-marks", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"Crème brûlée — déjà vu in São Paulo"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"Crème brûlée — déjà vu in São Paulo"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/str/remove-diacritic-marks", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"text": "Crème brûlée — déjà vu in São Paulo"
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "str.remove_diacritic_marks",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |