انجمن سایت کلیدستان


رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
رفع مشکل توابع رشته ای برای متن های فارسی در php

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

#1
اگر توابع مربوط به کار روی رشته ها مثل substr، str_replace، 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، str_replace، strlen، strpos و … از توابع mb_substr، mb_str_replace، 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');
// خروجی :
مدید


منبع: https://backendbaz.ir/%d8%b1%d9%81%d8%b9...%b1%d8%b3/
آموزش رایگان زبان های برنامه نویسی php، پایتون، جاوا و ...

https://backendbaz.ir
پاسخ
 سپاس شده توسط شماره مجازی امارات ، تلگرام ضد فیلتر 2023


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان