زمانی که از تابع ()strlen برای نمایش تعداد کاراکتر رشته فارسی و یا حروف فارسی استفاده کنید قطعا با مشکل مواجه میشید و خروجی غلطی رو دریافت می کنید برای اینکه این مشکل رو حل کنید به دستور زیر عمل کنید.

 

حل مشکل strlen با حروف فارسی

در استفاده از تابع strlen برای حروف انگلیسی به درستی کار میکنه و خروجی کد زیر میشه عدد 7 که تعداد کاراکتر ما صحیح هستش.

<?php
echo strlen("nikstar");
?>

اما تابع strlen برای حروف فارسی به این شکل عمل میکنه که هر حرف فارسی رو دوتا حساب میکنه و فاصله space رو یکی حساب میکنه و خروجی کد زیر میشه عدد 17 که تعداد کاراکتر غلط هستش.

<?php
echo strlen("نیک استار");
?>

برای اینکه این مشکل رو حل کنیم از تابع mb_strlen استفاده می کنیم. با استفاده از این تابع مشکل ما حل میشه و تعداد کارکتر رو به درستی نمایش میده.

<?php
echo mb_strlen("نیک استار" , 'UTF-8');
?>

در صورتی که شما از ‘UTF-8’ استفاده نکنید مشکلی پیش نمیاد و به درستی کار میکنه اما بهتره که آرگمان ‘UTF-8’ رو هم بهش بدیم تا یه موقع ایراد نگیره و بی نقص کار کنه.

 

 

حل مشکل str_word_count با زبان فارسی

تابع ()str_word_count هم همانند تابع strlen با حروف زبان فارسی مشکل داره و باید از تابع دیگه ای برای حل این مشکل استفاده کنید.

 

تابع str_word_count تعداد کلمات یک متن رو به ما بر میگردونه و خروجی کد زیر میشه 2 که تعداد کلمه nik star دو کلمه هست.

<?php
echo str_word_count("nik star");
?>

اما این کد با حروف یا رشته فارسی به این شکل عمل نمیکنه و هر حروف فارسی رو یک کلمه حساب میکنه و خروجی غلطی رو به ما میده برای اینکه این مشکل رو حل کنیم از تابع count و preg_split استفاده میکنیم به کد زیر توجه کنید.

<?php

$a="نیک استار";
echo count(preg_split('~[\p{Z}\p{P}]+~u', $a, null, PREG_SPLIT_NO_EMPTY)) ;

?>

شما به جای متغییر a$ میتونید رشته مورد نظرتون یا متغییر خودتون رو وارد کنید. با کد بالا مشکل ما حل میشه و خروجی میشه عد 2 که تعداد کلمات 2 هست.

 

 

روش دوم برای نمایش تعداد کلمات

موارد بالا رو من از اینترنت دیدم و قرار دادم اما روش پایین روشی هست که به ذهن خودم رسید. روش به این شکله که ما از دو تا تابع برای نمایش تعداد کلمات استفاده میکنیم.

تابع اول تابع ()explode هست این تابع کارش اینه که یک رشته رو با توجه به جداکننده ای که ما وارد کردیم ” ” رشته رو به آرایه تبدیل میکنه. ما در داخل دابل کتیشن یک فاصله ( space ) رو به عنوان جداکننده قرار دادیم. به مثال زیر توجه کنید.

<?php
$a = "سایت نیک استار";

$b = explode(" ",$a);

var_dump($b);

?>

خروجی

array(3) { [0]=>"site" [1]=>"nik" [2]=>"star" }

همونطور که در خروجی var_dump می بینید تعداد آرایه رو زده 3 ، که تعداد کلمات رشته ما هم 3 هست. پس این فکر خوبیه که ما تعداد آرایه رو به عنوان تعداد کلمات نمایش بدیم.

 

تابع دومی که قرار ازش استفاده کنیم تابع ()count هست کار این تابع اینه که تعداد خانه های یک آرایه رو به ما بر میگردونه.

حالا با استفاده از تابع ()count تعداد خانه های یک آرایه رو در میاریم.

<?php

$a = "site nik star";

$b = explode(" ",$a);

$c = count($b);

echo $c ;

?>
 خروجی
3

خب شما به این شکل میتونید خروجی رو به عنوان تعداد کلمات به کاربر نمایش بدید. این روش هم برای حروف فارسی یا رشته فارسی هم به درستی عمل میکنه، خیالتون تخت خواب فنری 😀

 

منبع: nikstar.ir

مطالب پیشنهادی
نظرات

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.

نه − یک =