بکندباز

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

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

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

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

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

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

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

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

برای برطرف کردن این مشکل به جای توابع 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

یا

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

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

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

دیدگاه‌ها

*
*