بکندباز

رفع مشکل توابع رشته ای برای متن های فارسی در php

اگر توابع مربوط به کار روی رشته ها مثل substr، strlen، strpos و … را روی متون فارسی استفاده کنیم می بینیم که نتیجه ی اشتباهی را در خروجی برمیگرداند:

$text = "Hello World";
echo strlen($text);
// خروجی = 11

$text = "خوش آمدید";
echo strlen($text);
// خروجی = 17
PHP

همانطور که می بینید، در مورد کلمه انگلیسی Hello World تعداد به درستی محاسبه می شود اما در مورد جمله فارسی “خوش آمدید” که تعداد حروف آن 9 است اشتباهاً عدد 17 را چاپ می کند.

در مورد باقی توابع نیز به همین شکل است. مثلاً در مورد تابع substr که مربوط به برداشت تکه ای از متن است، علاوه بر اینکه عملیات را اشتباه انجام میدهد، بلکه حروف ناخواسته ای را نیز چاپ می کند:

$text = "Hello World";
echo substr($text , 5, 4);
// خروجی :
Wor

$text = "خوش آمدید";
echo substr($text , 5, 4);
// خروجی :
� آ
PHP

برای برطرف کردن این مشکل به جای توابع substr، strlen، strpos و … از توابع mb_substr،mb_strlen، mb_strpos و … استفاده می کنیم.

این توابع یک ورودی اضافه نسبت به تابع اصلی دارند، که در آن انکدینگ مربوط به حروف فارسی یعنی utf-8 را باید قرار دهیم. البته اگر فایل php مان با همین انکدینگ نوشته شده باشد، نیازی به نوشتن این ورودی نیز نداریم.

$text = "Hello World";
echo strlen($text);
// خروجی = 11

$text = "خوش آمدید";
echo mb_strlen($text);
// خروجی = 9
PHP

یا

$text = "Hello World";
echo substr($text , 5, 4);
// خروجی :
Wor

$text = "خوش آمدید";
echo mb_substr($text , 5, 4, 'utf-8');
// خروجی :
مدید
PHP
backendbaz

مدیر وب سایت بکندباز

دیدگاه‌ها

*
*