ایجاد: ۱۶:۰۱ ۱۳۹۲/۱۱/۲۹
ویرایش: ۹:۰۵ ۱۳۹۲/۱۱/۳۰

آموزش‌ها

»

نمایش و جایگزینی ارقام متون سایت به صورت فارسی یا عربی بجای انگلیسی

در بین ارقام متداولی که با آن در سایت‌ها سروکار داریم، ارقام سه زبان فارسی، عربی و انگلیسی بیشتر کاربرد دارند. ارقام زبان «اردو» نیز همان ارقام زبان فارسی هستند که در فونت و زبان اردو، به شکل خاصی نمایش داده می‌شوند.

$digits = array(
  'persian' => array('۰','۱','۲','۳','۴','۵','۶','۷','۸','۹'),
  'arabic' => array('٠','١','٢','٣','٤','٥','٦','٧','٨','٩'),
  'english' => array('0','1','2','3','4','5','6','7','8','9')
);

هرچند فقط ارقام 0, 4, 5, 6 فارسی با ارقام عربی تفاوت ظاهری دارند اما سایر ارقام نیز دارای تفاوت (از نظر ترتیب یونیکد) است لذا اگر قصد عربی/فارسی کردن ارقام متن را دارید، لازم است همه ارقام آن را تبدیل کنید.

تبدیل ارقام فارسی/عربی به انگلیسی

این کار ساده بوده و بدون هیچ مشکلی با یک replace ساده انجام می‌شود؛

$text = str_replace($digit['persian'], $digit['english'], $text);
$text = str_replace($digit['arabic'], $digit['english'], $text);

تبدیل ارقام انگلیسی به ارقام فارسی/عربی

اگر متن ما یک متن ساده (فاقد تگ html) باشد، این تبدیل نیز به سادگی و با یک جایگزینی ساده - برعکس کد فوق - انجام می‌شود. منتها بسیاری از اوقات، متن ما حاوی تگ‌های html است و اگر قرار باشد که تمام ارقام فارسی/عربی شوند، نام و مقادیر تگ‌ها معنای خود را از دست خواهد داد:
<h2 class="titr5" style="height:25px;">در این تصادف 55 نفر زخمی شدند</h2>

در اینجا ما با کمک ویژگی پیشرفته «نگاهی به اطراف» Regex که قبلا توضیح دادیم، می‌توانیم به سادگی فقط ارقامی را Replace کنیم که درون علامت تگ نباشند. مثلا فرض کنید من قصد دارم رقم 5 انگلیسی را با مقدار فارسی آن (۵) تعویض کنم:

$text = preg_replace('%(?<=>|^)([^><]*?)5([^><]*?)(?=<|$)%', '$1۵$2', $text));

جایگزینی HTML ENTITIES ها قبل از جایگزینی اعداد

ممکن است بخشی از متن (خصوصا فارسی/عربی) شما به صورت HTML ENTITIES ذخیره شده باشد:
<p class="c">&#1576;&#1587;&#1605; &#1575;&#1604;&#1604;&#1607;</p>
که در اینصورت نیز برای ما مطلوب نیست که اعداد مربوط به entity ها نیز تبدیل شود. شاید در این حالت بهتر آن باشد که ابتدا این entity ها را به کاراکترهای یونیکد برگردانیم و سپس تبدیلات موردنظر را انجام دهیم:
$text = preg_replace_callback('/(&#[0-9]+;)/', function($m){
        return mb_convert_encoding($m[1], 'UTF-8', 'HTML-ENTITIES');
    }, $text);

یادداشت‌های مرتبط
  1. عبارات منطقی و با قاعده - مقدماتی
  2. عبارات منطقی و با قاعده - پیشرفته
  3. یونیکد و روش های استفاده از آن

مدیریت

نام وسیله

اعتبار ورود

نام کاربری

رمز عبور

رمز یکبارمصرف

... لیست تمام آموزش‌ها

تبلیغات

ربات‌های تلگرامی:
مجموعه ربات‌های تلگرامی ما برای ساده‌تر کردن کار با تلگرام و مدیریت کانال
دامنه‌های فروشی:
دامنه‌های زیر مربوط به ما یا مشتریان ماست که قابل واگذاری هستند. در صورت تمایل به داشتن یکی از آنها، با این اکانت تلگرامی مکاتبه نمایید.

دامنه‌هایی که می‌تواند مصرف تخصصی داشته باشد:
AnyDesk.ir, Firebase.ir, Angularjs.ir, 9px.ir alAdmin.ir, iQore.ir notion.ir, 3dn.ir,

دامنه‌هایی که می‌تواند مصرف فرهنگی/مذهبی داشته باشد:
mavaez.ir, 2aha.ir, babolelm.ir, mahjoor.ir

دامنه‌هایی که می‌تواند مصرف شخصی/عمومی داشته باشد:
azizami.ir, 90blog.ir