سلام. در این پست توابع کاربردی کار با رشته ها رو معرفی میکنم.
برای آشنایی و اطلاعات بیشتر در مورد هر تابع لینک مرجع تابع از سایت php.net قرار گرفته.
توابع این پست به تدریج کاملتر خواهد شد.

 

 

تابع strlen
 

int strlen ( string $string )

تابع یک آرگومان دارد:

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


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

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

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


* نکته: حالا strlen رو برای رشته ی فارسی اگه استفاده کنیم , هر کاراکترو دو بایت بحساب میاره :
 

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

 

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

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

 

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

 



 

تابع strtolower
 

string strtolower ( string $string )

تابع یک آرگومان دارد:

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

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

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

 



 

تابع strtoupper
 

string strtoupper ( string $string )

 

تابع یک آرگومان دارد:

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

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

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

 



 

تابع ucfirst
 

string ucfirst ( string $str )


تابع یک آرگومان دارد:

  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

 

string lcfirst ( string $str )


تابع یک آرگومان دارد:

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


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

$foo = 'HelloWorld';
$foo = lcfirst($foo);             // helloWorld

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

 



 

تابع ucwords
 

string ucwords ( string $str )


تابع یک آرگومان دارد:

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


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

$foo = 'hello world!';
$foo = ucwords($foo);             // Hello World!

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

 



 

تابع explode
 

array explode ( string $delimiter , string $string [, int $limit ] )


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

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

توضیحات:

  • این تابع رشته ای میگیره و بر اساس مرز جدا کننده ای که مشخص میکنیم , کلمات رو در خونه های یک آرایه میریزه.
  • رشته به یک آرایه از کلمات تبدیل می شود.
// Example 1
$pizza  = "piece1 piece2 piece3 piece4 piece5 piece6";
$pieces = explode(" ", $pizza);
echo $pieces[0]; // piece1
echo $pieces[1]; // piece2

#################################

// Example 2
$data = "foo:*:1023:1000::/home/foo:/bin/sh";
list($user, $pass, $uid, $gid, $gecos, $home, $shell) = explode(":", $data);
echo $user; // foo
echo $pass; // *
echo $shell; // /bin/sh

#################################

// Example 2
$pizza  = "piece1, piece2, piece3, piece4, piece5, piece6";
$pieces = explode(",", $pizza, -2);
print_r($pieces); // Array ( [0] => piece1 [1] => piece2 [2] => piece3 [3] => piece4 )

 



 

تابع implode
 

string implode ( string $glue , array $pieces )


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

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

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

$array = array('lastname', 'email', 'phone');
$comma_separated = implode(",", $array);

echo $comma_separated; // lastname,email,phone

 



 

تابع strrev
 

string strrev ( string $string )


تابع یک آرگومان دارد:

  1. یک رشته

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

echo strrev("Hello world!"); // outputs "!dlrow olleH"

 



 

تابع str_word_count
 

mixed str_word_count ( string $string [, int $format = 0 [, string $charlist ]] )


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

  1. یک رشته میگیرد.
  2. یک عدد بین 0 تا 2 میگیرد (اختیاری - پیش فرض = 0)
    * 0 => تعداد کلمات یک رشته رو بر میگردونه.
    * 1 => آرایه ای از کلمات رشته برمیگردونه و هر کلمه رو در یک خانه ی آرایه قرار میده.
    * 2 => مانند مورد قبلی آرایه ای از کلمات رشته بر میگردونه ولی ایندکس هاشون برابر موقعیتی هست که در جمله دارن.
             ++ اولین کاراکتر در رشته موقعیت صفر داره و بعدی 1 و بعدی 2 و ...
             ++ اولین کاراکتر کلمه در رشته , بیانگر موقعیت کلمه هست.
  3. لیستی از کاراکتر هایی که میتونیم مشخص کنیم تا بعنوان جزئی از یک کلمه محسوب بشن. (مثلا نقطه یا عدد)  (اختیاری)
     
$str = "Hello fri3nd, you're
       looking          good today!";


// 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

 



 

تابع str_shuffle
 

string str_shuffle ( string $str )


تابع یک آرگومان دارد:

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

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

$str = 'abcdef';
$shuffled = str_shuffle($str);

// This will echo something like: bfdaec
echo $shuffled;

 



 

تابع str_repeat
 

string str_repeat ( string $input , int $multiplier )


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

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

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

echo str_repeat("-=", 10);

// output
-=-=-=-=-=-=-=-=-=-=

 



 

تابع str_replace
 

mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )


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

  1. کلمه ای یا لیستی از کلماتی که در جمله به دنبالش هستیم و می خواهیم تغییرش دهیم.
  2. کلمه ای یا لیستی از کلمات جدیدی که میخواهیم در جمله جایگزین کنیم.
  3. رشته ی مورد نظری که قراره عملیات جایگزینی روش انجام بشه. (subject)
  4. متغیری مشخص میکنیم تا تابع , تعداد کلمات replace شده رو داخل این متغیر بریزه. (اختیاری)

توضیحات:
از اسمش معلومه که کارش عوض کردن کلمه ها و مقادیره.

// Example 1
$bodytag = str_replace("%body%", "black", "<body text='%body%'>");
echo $bodytag; // provides:  <body text='black'>


// Example 2
$vowels = array("a", "e", "i", "o", "u", "A", "E", "I", "O", "U");
$onlyconsonants = str_replace($vowels, "", "Hello World of PHP");
echo $onlyconsonants; // output:  Hll Wrld f PHP


// Example 3
$phrase  = "You should eat fruits, vegetables, and fiber every day.";
$healthy = array("fruits", "vegetables", "fiber");
$yummy   = array("pizza", "beer", "ice cream");

$newphrase = str_replace($healthy, $yummy, $phrase);
echo $newphrase; // output:  You should eat pizza, beer, and ice cream every day


// Example 4
$str = str_replace("ll", "", "good golly miss molly!", $count);
echo $count; // output:  2

 



 

تابع nl2br
 

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


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

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

توضیحات:
قبل از new lines تگ </ br> و یا <br> را اضافه میکند.

New Lines:

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


مثال ها:

(1)

echo nl2br("foo isn't\n bar");

// Output
    foo isn't<br />
     bar

/*********************************/
(2)

// is_xhtml = false
echo nl2br("Welcome\r\nThis is my HTML document", false);

// Output
    Welcome<br>
    This is my HTML document

/*********************************/
(3)

$string = "This\r\nis\n\ra\nstring\r";
echo nl2br($string);

// Output
    This<br />
    is<br />
    a<br />
    string<br />


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

 



 

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

string htmlentities ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get("default_charset") [, bool $double_encode = true ]]] )


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

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

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

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

<    =>    &lt;
>    =>    &gt;;
&    =>    &amp;
"    =>    &quot;
'    =>    &#039;

 

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

$str = '<script>alert("XSS")</script>';
echo htmlentities($str , ENT_COMPAT, 'UTF-8');


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

<script>alert("XSS")</script>


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

&lt;script&gt;alert(&quot;XSS&quot;)&lt;/script&gt;


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


مثال:

$str = "A 'quote' is <b>bold</b>";

// Page Source: A 'quote' is &lt;b&gt;bold&lt;/b&gt;
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 = "A 'quote' is <b>bold</b>";

// Page Source: A &#039;quote&#039; is &lt;b&gt;bold&lt;/b&gt;
// Encodes double and single quotes
echo htmlentities($str, ENT_QUOTES); // Display: A 'quote' is <b>bold</b>

 

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

$str = "\x8F!!!";

// Outputs an empty string
echo htmlentities($str, ENT_QUOTES, "UTF-8");

// Outputs "!!!"
echo htmlentities($str, ENT_QUOTES | ENT_IGNORE, "UTF-8");

 

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


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

$str = 'Hot & Cold and On &amp; Off';

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



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

 

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

&amp;amp;

 

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

 



 

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

string htmlspecialchars ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get("default_charset") [, bool $double_encode = true ]]] )

 

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

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

  • <
  • >
  • '
  • "
  • &

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

 



 

ادامه دارد....

محسن موحد | متفرقه , PHP , Javascript , Jquery , امنیت , پدر بزرگم | روز سه شنبه ۱۸ فروردین ۱۳۹۴ - ۰۰:۵۳ | نظرات (1)
رضا پیری قدیم در روز سه شنبه ۱۸ فروردین ۱۳۹۴ - ۰۸:۲۶ گفت:

عالیه. کم کم داری میشی php.net فارسی . البته با توضیحات قشنگ تر.(nerd).gif

نقل قول

فیلدهای * دار الزامی می باشند.