زمانی که از تابع ()strlen برای نمایش تعداد کاراکتر رشته فارسی و یا حروف فارسی استفاده کنید قطعا با مشکل مواجه میشید و خروجی غلطی رو دریافت می کنید برای اینکه این مشکل رو حل کنید به دستور زیر عمل کنید.
حل مشکل strlen با حروف فارسی
در استفاده از تابع strlen برای حروف انگلیسی به درستی کار میکنه و خروجی کد زیر میشه عدد 7 که تعداد کاراکتر ما صحیح هستش.
echo strlen(“nikstar”);
اما تابع strlen برای حروف فارسی به این شکل عمل میکنه که هر حرف فارسی رو دوتا حساب میکنه و فاصله space رو یکی حساب میکنه و خروجی کد زیر میشه عدد 17 که تعداد کاراکتر غلط هستش.
echo strlen(“نیک استار”);
برای اینکه این مشکل رو حل کنیم از تابع mb_strlen استفاده می کنیم. با استفاده از این تابع مشکل ما حل میشه و تعداد کارکتر رو به درستی نمایش میده.
echo mb_strlen(“نیک استار” , ‘UTF-8’);
در صورتی که شما از ‘UTF-8’ استفاده نکنید مشکلی پیش نمیاد و به درستی کار میکنه اما بهتره که آرگمان ‘UTF-8’ رو هم بهش بدیم تا یه موقع ایراد نگیره و بی نقص کار کنه.
حل مشکل str_word_count با زبان فارسی
تابع ()str_word_count هم همانند تابع strlen با حروف زبان فارسی مشکل داره و باید از تابع دیگه ای برای حل این مشکل استفاده کنید.
تابع str_word_count تعداد کلمات یک متن رو به ما بر میگردونه و خروجی کد زیر میشه 2 که تعداد کلمه nik star دو کلمه هست.
echo str_word_count(“nik star”);
اما این کد با حروف یا رشته فارسی به این شکل عمل نمیکنه و هر حروف فارسی رو یک کلمه حساب میکنه و خروجی غلطی رو به ما میده برای اینکه این مشکل رو حل کنیم از تابع count و preg_split استفاده میکنیم به کد زیر توجه کنید.
$a=”نیک استار”;
echo count(preg_split(‘~[\p{Z}\p{P}]+~u’, $a, null, PREG_SPLIT_NO_EMPTY)) ;
شما به جای متغیر a$ میتونید رشته مورد نظرتون یا متغیر خودتون رو وارد کنید. با کد بالا مشکل ما حل میشه و خروجی میشه عد 2 که تعداد کلمات 2 هست.
روش دوم برای نمایش تعداد کلمات
موارد بالا رو من از اینترنت دیدم و قرار دادم اما روش پایین روشی هست که به ذهن خودم رسید. روش به این شکله که ما از دو تا تابع برای نمایش تعداد کلمات استفاده میکنیم.
تابع اول تابع ()explode هست این تابع کارش اینه که یک رشته رو با توجه به جداکننده ای که ما وارد کردیم ” ” رشته رو به آرایه تبدیل میکنه. ما در داخل دابل کتیشن یک فاصله ( space ) رو به عنوان جداکننده قرار دادیم. به مثال زیر توجه کنید.
$a = “site nik star”;
$b = explode(” “,$a);
var_dump($b);
خروجی
array(3) { [0]=>”site” [1]=>”nik” [2]=>”star” }
همونطور که در خروجی var_dump می بینید تعداد آرایه رو زده 3 ، که تعداد کلمات رشته ما هم 3 هست. پس این فکر خوبیه که ما تعداد آرایه رو به عنوان تعداد کلمات نمایش بدیم.
تابع دومی که قرار ازش استفاده کنیم تابع ()count هست کار این تابع اینه که تعداد خانه های یک آرایه رو به ما بر میگردونه.
حالا با استفاده از تابع ()count تعداد خانه های یک آرایه رو در میاریم.
$a = “site nik star”;
$b = explode(” “,$a);
$c = count($b);
echo $c ;
خروجی
3
خب شما به این شکل میتونید خروجی رو به عنوان تعداد کلمات به کاربر نمایش بدید. این روش هم برای حروف فارسی یا رشته فارسی هم به درستی عمل میکنه، خیالتون تخت خواب فنری 😀
منبع: nikstar.ir