字符串的處理和分析在任何編程語言中都是一個重要的基礎,往往是簡單而重要的。信息的分類、解析、存儲和顯示,以及網絡中的數據都需要操作字符串來完成。尤其在web開發中更為重要,程序員大部分工作都是在操作字符串,本文將詳細介紹php中的字符串函數
[注意]關於javascript中字符串的屬性和方法移步至此
因為php是弱類型語言,所以其他類型的數據一般都可以直接應用於字符串操作函數中,而自己轉換成字符串類型進行處理
echo substr( "1234567", 2, 4 ); //將字串用函數substr()處理,輸出子字符串 345 echo substr( 123456, 2, 4 ); //將整型用字串函數處理,輸出同樣是字符串 345 echo hello; //先找hello常量,找不到就會將常名看作是字符串使用
字符串貌似數組,可以使用中括號語法,但由於無法與真正的數組進行區別,帶來二義性,所以最好使用功能相同的花括號
$str = "lamp"; echo $str."<br>"; echo $str{0};//輸出字符串$str中第一個字符l echo $str[1];//輸出字符串$str中第二個字符a,[]也可以,不過已過時
在處理變量解析時,如果在字符串中遇到美元符號,解析器會盡可能多地取得後面的字符以組成一個合法的變量名,如果想明示指定名字的結束,用花括號把變量名括起來
$lamp = array('os'=>'Linux'); //可以解析 echo "A OS is $lamp[os]."; //不能解析,如果在對關聯數組下標使用引號就必須使用花括號,否則將出錯 echo "A OS is $lamp['os']."; //可以解析,如果在對關聯數組下標使用引號就必須使用花括號,否則將出錯 echo "A OS is {$lamp['os']}."; //可以解析,注意PHP將數組下標看作常量名,常量不存在時將常量名稱轉為字符串,效率低 echo "A OS is {$lamp[os]}.";
[注意]在php中,一個GB2312編碼的漢字占2個字節,一個UTF-8編碼的漢字占3個字節
echo()
void echo ( string $arg1 [, string $... ] )
echo()函數用來輸出一個或多個字符串,它會輸出所有參數,且不會換行,沒有返回值
echo不是一個函數, 因此不一定要使用小括號來指明參數,單引號,雙引號都可以。另外,如果想給echo 傳遞多個參數,就不能使用小括號
<?php echo "Hello World"; $foo = "foobar"; echo "foo is $foo"; // foo is foobar echo $foo; // foobar ?>
print()
int print ( string $arg )
print()函數用來輸出字符串,且總是返回 1
<?php print("Hello World"); $foo = "foobar"; print "foo is $foo"; // foo is foobar print $foo; // foobar ?>
var_dump(echo('123'));//報錯 var_dump(print('123'));//int 1
echo可以接受多個參數(不可以加括號),而print不可以
<?php echo '1','2','3';//123 print 'a','b','c';//報錯 ?>
exit()
exit()函數用來輸出一個消息並且退出當前腳本,沒有返回值,同名函數為die()
void exit ([ string $status ] ) void exit ( int $status )
如果 status 是一個字符串,在退出之前該函數會打印status;如果 status 是一個 integer,該值會作為退出狀態碼,並且不會被打印輸出。退出狀態碼應該在范圍0至254,不應使用被PHP保留的退出狀態碼255。 狀態碼0用於成功中止程序
<?php exit('0');//0 exit(0);//無返回值 ?>
printf
printf()函數用於輸出格式化字符串
int printf ( string $format [, mixed $args [, mixed $... ]] )
sprintf
sprintf()函數用於把格式化的字符串寫入一個變量中
string sprintf ( string $format [, mixed $args [, mixed $... ]] )
字符串轉換格式如下
%% 返回百分比符號 %b 二進制數 %c 依照ASCII值的字符 %d 帶符號十進制數 %e 科學計數法(如1.5e3) %u 無符號十進制數 %f或%F 浮點數 %o 八進制數 %s 字符串 %x或%X 十六進制數
<?php $var = 10; printf("%%,%b,%c,%d,%e,%u,%o,%f,%s,%x",$var,$var,$var,$var,$var,$var,$var,$var,$var,$var);//%,1010, ,10,1.000000e+1,10,12,10.000000,10,a $result = sprintf("%%,%b,%c,%d,%e,%u,%o,%f,%s,%x",$var,$var,$var,$var,$var,$var,$var,$var,$var,$var); var_dump($result);//string '%,1010, ,10,1.000000e+1,10,12,10.000000,10,a' (length=44) ?>
trim()
trim()函數用於去除字符串首尾處的空白字符(或者其他字符),過濾後的字符串
string trim ( string $str [, string $charlist = " \t\n\r\0\x0B" ] )
此函數返回字符串str去除首尾空白字符後的結果。如果不指定第二個參數,trim() 將去除這些字符:
" " (ASCII 32 (0x20)),普通空格符 "\t" (ASCII 9 (0x09)),制表符 "\n" (ASCII 10 (0x0A)),換行符 "\r" (ASCII 13 (0x0D)),回車符 "\0" (ASCII 0 (0x00)),空字節符 "\x0B" (ASCII 11 (0x0B)),垂直制表符
charlist為可選參數,過濾字符也可由charlist參數指定。一般要列出所有希望過濾的字符,也可以使用 “..” 列出一個字符范圍
ltrim()
ltrim函數用於刪除字符串開頭的空白字符(或其他字符)
rtrim()
rtrim函數用於刪除字符串末端的空白字符(或者其他字符)
<?php $text = " \t\tHello World a1a1a1 "; $trimmed = trim($text); var_dump($trimmed);//string 'Hello World a1a1a1' (length=18) $trimmed = trim($text, "a1 "); var_dump($trimmed);//string ' Hello World' (length=13) $trimmed = trim($text, "1..e ");//string ' Hello Worl' (length=12) var_dump($trimmed); $ltrimmed = ltrim($text); var_dump($ltrimmed);//string 'Hello World a1a1a1 ' (length=22) $rtrimmed = rtrim($text); var_dump($rtrimmed);//string ' Hello World a1a1a1' (length=23) ?>
str_pad()
str_pad()函數使用另一個字符串填充字符串為指定長度
string str_pad ( string $input , int $pad_length [, string $pad_string = " " [, int $pad_type = STR_PAD_RIGHT ]] )
該函數返回input被從左端、右端或者同時兩端被填充到制定長度後的結果。如果可選的 pad_string 參數沒有被指定,input 將被空格字符填充,否則它將被 pad_string 填充到指定長度
[注意]如果pad_length的值是負數,小於或者等於輸入字符串的長度,不會發生任何填充
<?php $input = "Alien"; echo str_pad($input, 10); // 輸出 "Alien " echo str_pad($input, 10, "-=", STR_PAD_LEFT); // 輸出 "-=-=-Alien" echo str_pad($input, 10, "_", STR_PAD_BOTH); // 輸出 "__Alien___" echo str_pad($input, 6 , "___");// 輸出 "Alien_" ?>
strtolower()
strtolower — 將字符串轉化為小寫
strtoupper()
strtoupper — 將字符串轉化為大寫
ucfirst()
ucfirst — 將字符串的首字母轉換為大寫
ucwords()
ucwords — 將字符串中每個單詞的首字母轉換為大寫
<?php $foo = 'hello world!'; var_dump(ucwords($foo));//string 'Hello World!' (length=12) var_dump(ucfirst($foo));//string 'Hello world!' (length=12) var_dump(strtoupper($foo));//string 'HELLO WORLD!' (length=12) var_dump(strtolower($foo));//string 'hello world!' (length=12) ?>
nl2br()
nl2br — 在字符串所有新行之前插入 HTML 換行標記
string nl2br ( string $string [, bool $is_xhtml = true ] )
<?php /* foo isn't<br /> bar */ echo nl2br("foo isn't\n bar"); ?>
htmlspecialchars()
string htmlspecialchars ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get("default_charset") [, bool $double_encode = true ]]] )
htmlspecialchars - 把指定特殊符號轉換成實體
& (ampersand) & " (double quote) ", unless ENT_NOQUOTES is set ' (single quote) ' or ' < (less than) < > (greater than) >
<?php $new ="<script>alert(1)</script>"; echo $new;//彈出1 $new = htmlspecialchars("<script>alert(1)</script>"); echo $new; //顯示字符串"<script>alert(1)</script>" ?>
<?php $str = "<B>WebServer:</B> & 'Linux' & 'Apache'";//常有HTML標記和單引號的字符串 echo htmlspecialchars($str, ENT_COMPAT);//轉換HTML標記和轉換雙引號 echo "<br>\n"; echo htmlspecialchars($str, ENT_QUOTES);//轉換HTML標記和轉換兩種引號 echo "<br>\n"; echo htmlspecialchars($str, ENT_NOQUOTES);//轉換HTML標記和不對引號轉換 ?>
htmlentities()
string htmlentities ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get("default_charset") [, bool $double_encode = true ]]] )
htmlentities - 將所有的非ASCII碼轉換成對應實體代碼
htmlentities()和htmlspecialchars()的功能都是轉換字符為HTML字符編碼,特別是url和代碼字符串,防止字符標記被浏覽器執行。htmlentities轉換所有的html標記,htmlspecialchars只格式化& ' " < 和 > 這幾個特殊符號
<?php $str = "<p>123</p>"; echo $str;//顯示段落123 echo htmlentities($str);//'123' echo htmlspecialchars($str);//'123' ?>
strip_tags()
strip_tags — 嘗試返回給定的字符串 str 去除空字符、HTML 和 PHP 標記後的結果
string strip_tags ( string $str [, string $allowable_tags ] )
使用可選的第二個參數allowable_tags指定不被去除的字符列表
<?php $text = '<p>Test paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>'; echo strip_tags($text);//'Test paragraph. Other text' echo "\n"; echo strip_tags($text, '<p>').'<br>';//<p>Test paragraph.</p> Other text $text = '<div><b>123</b></div>'; echo strip_tags($text);//'123' ?>
addslashes()
addslashes — 使用反斜線引用字符串,返回字符串,該字符串為了數據庫查詢語句等的需要在某些字符前加上了反斜線。這些字符是單引號(')、雙引號(")、反斜線(\)與 NUL(NULL 字符)
string addslashes ( string $str )
<?php $str = "Is your name O'reilly?"; echo addslashes($str);// "Is your name O\'reilly?" ?>
stripslashes()
stripslashes — 反引用一個引用字符串
string stripslashes ( string $str )
<?php $str = "Is your name O\'reilly?"; echo stripslashes($str);//"Is your name O'reilly?" ?>
strrev()
strrev — 反轉字符串
string strrev ( string $string )
<?php echo strrev("Hello world!"); // 輸出 "!dlrow olleH" ?>
strlen()
strlen — 獲取字符串長度
int strlen ( string $string )
<?php $str = 'abcdef'; echo strlen($str); // 6 $str = ' ab cd '; echo strlen($str); // 7 ?>
md5()
md5 — 計算字符串的 MD5 散列值
string md5 ( string $str [, bool $raw_output = false ] )
如果可選的raw_output被設置為TRUE,那麼MD5報文摘要將以16字節長度的原始二進制格式返回
<?php $str = 'apple'; if (md5($str) === '1f3870be274f6c49b3e31a0c6728957f') { echo "Would you like a green or red apple?"; } ?>
strcmp()
strcmp — 字符串比較,如果 str1 小於 str2 返回 < 0; 如果 str1 大於 str2 返回 > 0;如果兩者相等,返回 0
int strcmp ( string $str1 , string $str2 )
<?php $var1 = "Hello"; $var2 = "hello"; if (strcmp($var1, $var2) !== 0) { echo '$var1 is not equal to $var2 in a case sensitive string comparison'; } ?>
strncmp()
strncmp — 限定字符串長度的字符串比較
int strncmp ( string $str1 , string $str2 , int $len )
如果 str1 小於 str2 返回 < 0; 如果 str1 大於 str2 返回 > 0;如果兩者相等,返回 0
<?php echo strncmp("xybc","a3234",0); // 0 echo strncmp("xybc","a3234",1); // 1 ?>
strcasecmp()
strcasecmp — 字符串比較(不區分大小寫),如果 str1 小於 str2 返回 < 0; 如果 str1 大於 str2 返回 > 0;如果兩者相等,返回 0
int strcasecmp ( string $str1 , string $str2 )
<?php $var1 = "Hello"; $var2 = "hello"; if (strcasecmp($var1, $var2) == 0) { echo '$var1 is equal to $var2 in a case-insensitive string comparison'; } ?>
strnatcmp()
strnatcmp — 使用自然排序算法比較字符串
int strnatcmp ( string $str1 , string $str2 )
如果 str1 小於 str2 返回 < 0; 如果 str1 大於 str2 返回 > 0;如果兩者相等,返回 0
<?php $arr1 = $arr2 = array("img12.png", "img10.png", "img2.png", "img1.png"); usort($arr1, "strcmp"); print_r($arr1);//Array ( [0] => img1.png [1] => img10.png [2] => img12.png [3] => img2.png ) usort($arr2, "strnatcmp");//Array ( [0] => img1.png [1] => img2.png [2] => img10.png [3] => img12.png ) print_r($arr2); ?>