محسن موحد (آموزش برنامه نویسی)
محسن موحد (آموزش برنامه نویسی)
خواندن ۸ دقیقه·۳ سال پیش

توابع کاربردی رشته ها


تابع strlen

یک آرگومان:

  1. یک رشته میگیره.

طول رشته را برمیگرداند.

$str = 'abcdef'; echo strlen($str); // 6 $str = ' ab cd '; echo strlen($str); // 7

* نکته: حالا strlen رو برای رشته ی فارسی اگه استفاده کنیم , هر کاراکترو دو بایت بحساب میاره :(علت: چون strlen تعداد بایت هارو خروجی میده و براساس مجموعه ASCII که یک بایتی هست محاسبه میشود نه Unicode های چند بایتی)

$str = 'محسن'; echo strlen($str); // 8

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



تابع mb_strlen
دو آرگومان داره:

  1. رشته میگیره
  2. انکدینگ میگیره (اختیاری - که ما از utf-8 استفاده میکنیم.)
$str = 'محسن'; echo mb_strlen($str, 'utf-8'); // 4

* توابع کار با رشته های کدگذاری شده(چند بایتی) با (mb_(funcName شروع میشن.



تابع str_word_count

سه آرگومان:

  1. یک رشته میگیرد.
  2. یک عدد بین 0 تا 2 میگیرد (اختیاری - پیش فرض = 0)
    * 0 => تعداد کلمات یک رشته رو بر میگردونه.
    * 1 => آرایه ای از کلمات رشته برمیگردونه و هر کلمه رو در یک خانه ی آرایه قرار میده.
    * 2 => مانند مورد قبلی آرایه ای از کلمات رشته بر میگردونه ولی ایندکس هاشون برابر موقعیتی هست که در جمله دارن.
    ++ اولین کاراکتر در رشته موقعیت صفر داره و بعدی 1 و بعدی 2 و ...
    ++ اولین کاراکتر کلمه در رشته , بیانگر موقعیت کلمه هست.
  3. لیستی از کاراکتر هایی که میتونیم مشخص کنیم تا بعنوان جزئی از یک کلمه محسوب بشن. (مثلا نقطه یا عدد) (اختیاری)
$str = &quotHello fri3nd, you're looking good today!&quot // Example 1 print_r(str_word_count($str, 1)); // Example 2 print_r(str_word_count($str, 2)); // Example 3 print_r(str_word_count($str, 1, 'àáãç3')); // Example 4 echo str_word_count($str);

خروجی ها:

// Example 1 Array ( [0] => Hello [1] => fri [2] => nd [3] => you're [4] => looking [5] => good [6] => today ) // Example 2 Array ( [0] => Hello [6] => fri [10] => nd [14] => you're [29] => looking [46] => good [51] => today ) // Example 3 Array ( [0] => Hello [1] => fri3nd [2] => you're [3] => looking [4] => good [5] => today ) // Example 4 7



تابع strtolower

یک آرگومان:

  1. رشته میگیره

کاراکتر ها رو تبدیل به کاراکتر های کوچک میکند.

$str = &quotMary Had A Little Lamb and She LOVED It So&quot $str = strtolower($str); echo $str; // Prints: mary had a little lamb and she loved it so




تابع strtoupper

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

$str = &quotMary Had A Little Lamb and She LOVED It So&quot $str = strtoupper($str); echo $str; // Prints: MARY HAD A LITTLE LAMB AND SHE LOVED IT SO

تابع ucfirst

یک آرگومان:

  1. رشته میگیره

اولین کاراکتر رشته رو به کاراکتر بزرگ تبدیل میکنه (first upper case).

$foo = 'hello world!'; $foo = ucfirst($foo); // Hello world! $bar = 'HELLO WORLD!'; $bar = ucfirst($bar); // HELLO WORLD! $bar = ucfirst(strtolower($bar)); // Hello world!




تابع lcfirst

برعکس تابع قبلی , اولین کاراکتر رشته رو به حرف کوچک تبدیل میکنه.

$foo = 'HelloWorld'; $foo = lcfirst($foo); // helloWorld $bar = 'HELLO WORLD!'; $bar = lcfirst($bar); // hELLO WORLD! $bar = lcfirst(strtoupper($bar)); // hELLO WORLD!




تابع ucwords

یک آرگومان:

  1. یک رشته میگیره.

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

$foo = 'hello world!'; $foo = ucwords($foo); // Hello World! $bar = 'HELLO WORLD!'; $bar = ucwords($bar); // HELLO WORLD! $bar = ucwords(strtolower($bar)); // Hello World!




تابع explode

سه آرگومان:

  1. یک مرزی برای جدا کردن کلمات از یک دیگر(delimiter)
  2. یک رشته
  3. یک عدد , برای مشخص کردن محدوده ی انتخابی.(اختیاری)
    * اگر عدد منفی باشه , از آخر به اندازه ی عدد , از محدوده ی انتخابی حذف میشن.

این تابع رشته ای میگیره و بر اساس مرز جدا کننده ای که مشخص میکنیم , کلمات رو در خونه های یک آرایه میریزه.
رشته تبدیل میشه به یک آرایه.

// Example 1 $pizza = &quotpiece1 piece2 piece3 piece4 piece5 piece6&quot $pieces = explode(&quot &quot, $pizza); echo $pieces[0]; // piece1 echo $pieces[1]; // piece2 ################################# // Example 2 $data = &quotfoo:*:1023:1000::/home/foo:/bin/sh&quot list($user, $pass, $uid, $gid, $gecos, $home, $shell) = explode(&quot:&quot, $data); echo $user; // foo echo $pass; // * echo $shell; // /bin/sh ################################# // Example 2 $pizza = &quotpiece1, piece2, piece3, piece4, piece5, piece6&quot $pieces = explode(&quot,&quot, $pizza, -2); print_r($pieces); // Array ( [0] => piece1 [1] => piece2 [2] => piece3 [3] => piece4 )


تابع implode

دو آرگومان:

  1. کاراکتر یا عبارتی برای چسباندن کلمات بهم.
  2. یک آرایه.

این تابع برخلاف تابع قبلی عمل میکنه و یک آرایه میگیره و بر اساس کاراکتر چسباننده , خانه های آرایه رو بهم می چسبونه و یک رشته به عمل میاد.(یعنی بر عکس تابع explode)

$array = array('lastname', 'email', 'phone'); $comma_separated = implode(&quot,&quot, $array); echo $comma_separated; // lastname,email,phone



تابع strrev

یک آرگومان:

  1. یک رشته

خوب مشخصه دیگه. یک رشته میگیره و رشته رو برعکس میکنه.

echo strrev(&quotHello world!&quot); // outputs &quot!dlrow olleH&quot


تابع str_shuffle

یک آرگومان:

  1. یک رشته میگیرد.

کاراکتر های رشته به صورت رندوم جاهاشون عوض میشه و مخلوط میشن.مثل تابع shuffle در آرایه.

$str = 'abcdef'; $shuffled = str_shuffle($str); // This will echo something like: bfdaec echo $shuffled;

تابع str_repeat

دو آرگومان:

  1. عبارتی که میخواهیم تکرار بشه.
  2. تعداد دفعات تکرار عبارت (گام تکرار) که این عدد باید بزرگتر یا مساوی , صفر باشد.
    * اگر برابر صفر باشد , یک رشته ی خالی برمیگردونه.

این تابع , عبارتی که بهش میدیمو با تعداد دفعاتی که مشخص کردیم, تکرار میکنه.

echo str_repeat(&quot-=&quot, 10); // output -=-=-=-=-=-=-=-=-=-=

تابع str_replace

از اسمش معلومه که کارش عوض کردن کلمه ها و مقادیره.
4 آرگومان:

  1. کلمه ای یا لیستی از کلماتی که در جمله به دنبالش هستیم و می خواهیم تغییرش دهیم.
  2. کلمه ای یا لیستی از کلمات جدیدی که میخواهیم در جمله جایگزین کنیم.
  3. رشته ی مورد نظری که قراره عملیات جایگزینی روش انجام بشه. (subject)
  4. متغیری میدیم تا تابع , تعداد کلمات replace شده رو داخل این متغیر بریزه. (اختیاری)
// Example 1 $bodytag = str_replace(&quot%body%&quot, &quotblack&quot, &quot<body text='%body%'>&quot); echo $bodytag; // provides: <body text='black'> // Example 2 $vowels = array(&quota&quot, &quote&quot, &quoti&quot, &quoto&quot, &quotu&quot, &quotA&quot, &quotE&quot, &quotI&quot, &quotO&quot, &quotU&quot); $onlyconsonants = str_replace($vowels, &quot&quot, &quotHello World of PHP&quot); echo $onlyconsonants; // output: Hll Wrld f PHP // Example 3 $phrase = &quotYou should eat fruits, vegetables, and fiber every day.&quot $healthy = array(&quotfruits&quot, &quotvegetables&quot, &quotfiber&quot); $yummy = array(&quotpizza&quot, &quotbeer&quot, &quotice cream&quot); $newphrase = str_replace($healthy, $yummy, $phrase); echo $newphrase; // output: You should eat pizza, beer, and ice cream every day // Example 4 $str = str_replace(&quotll&quot, &quot&quot, &quotgood golly miss molly!&quot, $count); echo $count; // output: 2




تابع htmlentities : (جلوگیری از حملات XSS)

string htmlentities ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get(&quotdefault_charset&quot) [, bool $double_encode = true ]]] )

4 آرگومان:

  1. یک رشته میگیره
  2. تعیین کردن چگونگی رفتار نسبت به کوتیشن ها و مقادیر نامعتبر (اختیاری - پیش فرض = ENT_COMPAT)
    یه سری ثابت ها هستن که میتونیم در این فلگ استفاده کنیم:
    + ENT_COMPAT : این ثابت , دابل کوتیشن (") های رشته رو کدگذاری میکنه.(تک کوتیشنو شامل نمیشه)
    + ENT_QUOTES : این ثابت , هم دابل کوتیشن(") و هم تک کوتیشنو(') شامل میشه.
    + ENT_NOQUOTES : این ثابت , هیچکدوم از کوتیشن هارو شامل نمیشه.
    + ENT_IGNORE : قسمت نامعتبر رشته رو حذف میکنه.(ignores invalid encoding) - اضافه شده در php 5.3.0
  3. انکدینگ - (اختیاری - UTF-8 بزارید.)
  4. کدگذاری مجدد روی مقادیر کدگذاری شده (اختیاری - پیش فرض = true)

* این تابع کاراکتر های معنی دار و قابل اجرا رو در برنامه مثل (تگ ها) با کدگذاری اثرشونو خنثی میکنه و در صفحه دیده میشن.

بعنوان مثال , چنتا از کاراکتر ها و معادل کد گذاری شده ی اونها:

< => < > => >; & => & &quot => &quot ' => '

خوب با توجه به کاراکتر هایی که نمونه اوردم چنتا مثال میزنم.

$str = ''; echo htmlentities($str , ENT_COMPAT, 'UTF-8');

چیزی که در صفحه چاپ میشه:

اما چیزی که در page source چاپ میشه.(البته var_dump هم میتونید بگیرید.)

alert(&quotXSS&quot)

یک نکته: ENT_COMPAT گفتیم دابل کوت هارو کد میکنه.(تک کوت هارو شامل نمیشه!)
مثال:

$str = &quotA 'quote' is <b>bold</b>&quot // Page Source: A 'quote' is <b>bold</b> echo htmlentities($str); // A 'quote' is <b>bold</b> => by default , the flag is ENT_COMPAT echo htmlentities($str, ENT_COMPAT); // Display: A 'quote' is <b>bold</b> *********************************** $str = &quotA 'quote' is <b>bold</b>&quot // Page Source: A 'quote' is <b>bold</b> // Encodes double and single quotes echo htmlentities($str, ENT_QUOTES); // Display: A 'quote' is <b>bold</b>

حالا یک مثال واسه فلگ ENT_IGNORE:

$str = &quot\x8F!!!&quot // Outputs an empty string echo htmlentities($str, ENT_QUOTES, &quotUTF-8&quot); // Outputs &quot!!!&quot echo htmlentities($str, ENT_QUOTES | ENT_IGNORE, &quotUTF-8&quot);

با فلگ ignore , قسمت نامعتبرو نادیده میگیره و بقیه رشته رو چاپ میکنه ولی فلگ های (quotes , compat , noquotes) اگر مقداری نامعتبر در رشته وجود داشته باشه , یک رشته ی خالی بر میگردونن که در مثال بالا دیدیم.

اما مثالی برای آرگومان چهارم با مقدار false:

$str = 'Hot & Cold and On & Off'; // Display: Hot & Cold and On & Off echo htmlentities($str, ENT_COMPAT, 'UTF-8', TRUE); // Source: Hot & Cold and On & Off // Display: Hot & Cold and On & Off echo htmlentities($str, ENT_COMPAT, 'UTF-8', FALSE); // Source: Hot & Cold and On & Off

همونطور که مشاهده کردید , زمانی که در حالت true باشه , عبارت (;amp&) و قسمت (&) عبارت یک مرتبه ی دیگه , encode شد و تبدیل شد به:

&

خوب , فک کنم مثال ها کافی بودن واسه آشنایی با این تابع.
از این تابع برای چاپ مقادیری که از کاربر میگیرین استفاده کنین.این تابع از حملات XSS جلوگیری میکنه.



تابع htmlspecialchars : (جلوگیری از حملات XSS)

string htmlspecialchars ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get(&quotdefault_charset&quot) [, bool $double_encode = true ]]] )

* مشخصات و کاربرد مثل تابع قبلی (htmlentities)

* این تابع , فقط همین چند کاراکتر مشخص شده رو encode میکنه:

  • <
  • >
  • '
  • "
  • &

به نوعی این تابع زیر مجموعه ای از htmlentities می باشد.



تابع nl2br

string nl2br ( string $string [, bool $is_xhtml = true ] )

2 آرگومان:

  1. عبارت مورد نظر
  2. با Xhtml سازگار است یا خیر. (اختیاری - پیش فرض: true)

بجای new lines تگ </ br> و یا <br> را اضافه میکند.

New Lines:

\r\n \n\r \n \r

مثال ها:

(1) echo nl2br(&quotfoo isn't\n bar&quot); // Output foo isn't<br /> bar /*********************************/ (2) // is_xhtml = false echo nl2br(&quotWelcome\r\nThis is my HTML document&quot, false); // Output Welcome<br> This is my HTML document /*********************************/ (3) $string = &quotThis\r\nis\n\ra\nstring\r&quot echo nl2br($string); // Output This<br /> is<br /> a<br /> string<br />

* اگر از جایی متنی کپی میکنید و در ادیتوری ویرایش نشده از این تابع استفاده کنید.


نویسنده: محسن موحد

stringکار با رشته هاphpبرنامه نویسیطول رشته
برنامه نویس متخصص PHP، Mysql، Javascript، HTML، CSS، Node.js، Android، Laravel، Yii2 - مدیر پشتیبانی فنی و سرپرست منتورها در شرکت 7learn.com
شاید از این پست‌ها خوشتان بیاید