ی و ک عربی در متن فارسی: مشکل و راهحل
۳ دقیقه مطالعهبروزرسانی:
اگر در سایت یا پایگاهدادهتان جستوجوی «علی» نتیجهی «علي» را پیدا نمیکند، احتمالاً با مشکل «ی و ک عربی» روبهرو هستید. این دو نویسه ظاهر تقریباً یکسانی دارند ولی برای کامپیوتر دو چیز متفاوتاند. اینجا میبینیم از کجا میآیند و چطور پاکشان کنیم.
تفاوت واقعی: کدهای یونیکد
| نویسه | نام | کد یونیکد | در فارسی |
|---|---|---|---|
| ی | Farsi Yeh | U+06CC | درست |
| ي | Arabic Yeh | U+064A | عربی؛ باید به «ی» تبدیل شود |
| ى | Alef Maksura | U+0649 | گاهی بهجای «ی» میآید؛ باید «ی» شود |
| ک | Keheh | U+06A9 | درست |
| ك | Arabic Kaf | U+0643 | عربی؛ باید به «ک» تبدیل شود |
«ي» در شکل پایانی دو نقطهی زیرین دارد و «ی» ندارد، ولی در بسیاری از فونتها و در شکلهای میانی ظاهرشان یکی است؛ به همین دلیل چشم تفاوت را نمیبیند.
اعداد هم همین مشکل را دارند
ارقام عربی-هندی (٠١٢٣٤٥٦٧٨٩، از U+0660 تا U+0669) با ارقام فارسی (۰۱۲۳۴۵۶۷۸۹، از U+06F0 تا U+06F9) فرق دارند. «۴ ۵ ۶» فارسی با «٤ ٥ ٦» عربی حتی شکل متفاوتی دارند. اگر یک متن هر دو را قاطی داشته باشد، جستوجوی عددی هم خراب میشود.
این مشکل از کجا میآید؟
- کیبوردی که برای عربی تنظیم شده است (اغلب در لپتاپها و گوشیهای وارداتی)
- کپی از سایتها و فایلهای عربی، PDF و بعضی نسخههای قدیمی Word
- بعضی نرمافزارها و پایگاههای دادهی قدیمی که پیشفرضشان عربی است
- ایمپورت داده از منابع مختلف
چه مشکلی میسازد؟
- جستوجو: در جستوجوی داخلی سایت، فیلترها و پایگاهداده، «علی» و «علي» دو کلمهی متفاوتاند.
- دادهی تکراری: یک نام یا برچسب دو بار با دو املا ثبت میشود.
- مرتبسازی و مقایسه: ترتیب الفبایی و مقایسهی رشتهها درست کار نمیکند.
- آدرس و نامک: آدرسهایی که یک نسخهشان با «ي» ساخته شده با نسخهی «ی» یکی نیستند.
- ظاهر حرفهای: برای خوانندهی فارسی، «ي» و «ك» در بعضی فونتها غیرعادی دیده میشود.
راهحل برای یک متن
- متن را در ابزار متن فارسی بچسبانید.
- گزینهی «ي ك ← ی ک» (روشن بهطور پیشفرض) و در صورت نیاز حالت اعداد را انتخاب کنید.
- نتیجه و تعداد اصلاحها را ببینید و کپی کنید. آدرسها، ایمیلها و متن بین بکتیک دستنخورده میمانند.
پردازش در مرورگر شما انجام میشود و متن به سرور نمیرود.
راهحل برای سایت و پایگاهداده
بهترین کار، یکدستسازی هنگام ورود داده است، نه بعداً. اگر برنامهنویسید، در لایهی ورودی (فرمها و API) متن را اصلاح کنید:
const normalizeFa = (text) =>
text
.replace(/[\u064A\u0649]/g, "\u06CC") // ي و ى به ی
.replace(/\u0643/g, "\u06A9"); // ك به ک- برای دادهی قدیمی، یک بار اسکریپت اصلاح روی پایگاهداده اجرا کنید (حتماً پس از پشتیبانگیری).
- برای جستوجو، هم کلمهی جستوجو و هم متن ذخیرهشده را قبل از مقایسه یکدست کنید.
- در MySQL و PostgreSQL قاعدههای مقایسه (collation) را بررسی کنید؛ بعضی آنها را یکسان میگیرند و بعضی نه.
در وردپرس
افزونهی رسمی خط وب ابزار (نسخهی ۱٫۵ به بعد) گزینهای دارد که هنگام ذخیرهی نوشته «ي» و «ك» را به «ی» و «ک» تبدیل میکند. این گزینه پیشفرض خاموش است و فقط متن قابلمشاهده را عوض میکند، نه تگها، ویژگیها، شورتکدها، آدرسها و نامکها. افزونه را از صفحهی افزونهی وردپرس بگیرید.
پیشگیری
- کیبورد خود و تیم را روی چیدمان فارسی استاندارد بگذارید.
- همهی فرمهای عمومی را یکدستسازی کنید.
- هنگام ایمپورت داده، اول نرمالسازی و بعد ذخیره.
با ابزار امتحان کنید
سؤالات متداول
گوگل اینها را یکی میداند؟
نمیتوان روی آن حساب کرد. مهمتر این است که جستوجوی داخلی سایت، پایگاهداده و فیلترهای خودتان درست کار کنند؛ برای آنها یکدستسازی لازم است.
حذف اعراب هم لازم است؟
نه همیشه. در متنهای دینی، شعر و آموزشی ممکن است اعراب لازم باشد؛ برای همین این گزینه در ابزار ما پیشفرض خاموش است.
چطور بفهمم متنم ي و ك عربی دارد؟
متن را در ابزار بچسبانید؛ تعداد اصلاح «ي و ك عربی» نشان داده میشود. اگر صفر بود، متن شما پاک است.