این سایت به کاربران امکان می‌دهد پرسشهای خود در زمینه طراحی وب با PHP و jQuery و CSS و MySQL و ... را مطرح یا به پرسش‌های دیگران پاسخ دهند.

4,353 پرسش

5,012 پاسخ

9,090 نظر

2,843 کاربر

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

+5 رای
چگونه می‌توان تمامی ارقام انگلیسی یک متن را به اعداد فارسی یا عربی تبدیل کرد؟
پرسیده شد 3 سال پیش در ساختارهای کنترلی شرط و حلقه توسط عليرضا فعال (امتیاز: 5,440)

1 پاسخ

+4 رای
در php یک تابع پراستفاده داریم به نام str_replace که کار آن جایگزینی (replace) در متن است.
این تابع علاوه بر اینکه میتواند یک رشته را با رشته دیگری در متن شما جایگزین کند، توانایی این را دارد که یک آرایه از رشته‌ها را با آرایه دیگری از رشته‌ها جایگزین کند. مثلا برای کد مورد نیاز شما:
$myText = ' ... متن شما که حاوی رقم های انگلیسی است ... ';

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

#    برای تبدیل رقم های متن شما به فارسی
$myText = str_replace($english_digits, $persian_digits, $myText);

#    برای تبدیل رقم های متن شما به عربی
$myText = str_replace($english_digits, $arabic_digits, $myText);


نکته: این تابع تمامی ارقام را تبدیل می‌کند که اگر شما هم متن خام (غیر html) به آن بدهید، بدون مشکل کار می‌کند.
اما اگر بخواهید متن html به آن بدهید، نباید همه ارقام تبدیل شوند چرا که مثلا در کد html زیر:
<h2 style="color:#139;">Hello php-jquery.ir</h2>
<a href="http://www.2600.com/">The Hacker Quarterly</a>

ارقام داخل تگ هم عوض شده و تگ‌ها یا ویژگی‌های آنها کارایی خود را از دست می‌دهد. لذا لازم است بجای تابع str_replace ساده، از تابع پیشرفته‌ای که در اینجا معرفی کردم، استفاده کنید:
http://www.php-jquery.ir/115/
پاسخ داده شد 3 سال پیش توسط علیرضا استاد (امتیاز: 189,340)
یه مورد خارج از سوال اصلی هم عرض کنم که
اگر چند تا دونه عدد میخواهید تبدیل کنید به صورت دستی
میتونید از Character Map خود ویندوز استفاده کنید
%SystemRoot%\system32\charmap.exe
داداش ترتیب باید رعایت شود
$arabic_digits    =    array('٠','١','٢','٣','٤','٥','٦','٧','٨','٩');
رعایت شده بود اما در نمایش صفر رفته آخر. همانطور که شما هم چیزی که نوشتی همینطور شد.
البته می‌شد اینطور گفت که این مشکل پیش نیاد در نمایش:
$persian_digits    =    str_split('۰۱۲۳۴۵۶۷۸۹');
$arabic_digits    =    str_split('٠١٢٣٤٥٦٧٨٩');
$english_digits    =    str_split('0123456789');
ببینید این کدی که شما نوشتید اومد 1222222 رو به صفر تازه تونم انگلیسی تبدیل کرد.
این تابع for یا while نمی خواد؟
خیر دوست گرامی
این کد تست شده است
همانطور که توضیح داده شد، تابع str_replace رو آرایه هم عمل می‌کند و جایگزینی را روی تک تک عناصر آن انجام می‌دهد لذا نیازی به طولانی کردن برنامه با حلقه نیست.
سلام من یه صفحه ایندکس دارم توش اعداد انگلیس هست

الان چه طوری باید این کد ها رو وارد کنم که اعداد فارسی بشه؟
@lord کدهای فوق php هستند. اگر index شما از نوع html است لازم است با 10 بار جیگزینی (replace) ارقام 0 تا 9 فارسی را جایگزین لاتین کنید. هرچند باید مراقب باشید که این کار را فقط روی ارقام لاتین متن انجام دهید و نه ارقام لاتین بین < و >

لطفا جهت درج پاسخ ، وارد شوید ویا ثبت نام نمایید.