程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP中substr() mb_substr() mb_struct()的區別和用法及Smar...

PHP中substr() mb_substr() mb_struct()的區別和用法及Smar...

編輯:關於PHP編程

PHP substr(),mb_substr()及mb_strcut的區別和用法及Smarty模板中的truncate調節器淺談
PHP substr() 函數可以  分割文字,但要分割的文字如果包括中文字符往往會遇到問題,這時可以用mb_substr()/mb_strcut這個函 數,mb_substr()  /mb_strcut的用法與substr()相似,只是在mb_substr()/mb_strcut最後要加入多一個 參數,以設定字符串的編碼,但是  一般的服務器都沒打開php_mbstring.dll,需要在php.ini在把php_mbstring.dll 打開。

舉個例子:
<?php
echo mb_substr('這樣一來我的字符串就不會有亂碼^_^', 0, 7, 'utf-8');
?>
輸出:這樣一來我的字
<?php
echo mb_strcut('這樣一來我的字符串就不會有亂碼^_^', 0, 7, 'utf-8');
?>
輸出:這樣一
從上面的例子可以看出,mb_substr是按字來切分字符,而mb_strcut是按字節來切分字符,但是都不會產生半個字符的現象……

mbstring 函數的說明:

php的mbstring擴展模塊提供了多字節字符的處理能力,平常最常用的就是用mbstring來切分多字節的中文字符,這樣可以避免出現半個字符的情況,由於是php的擴展,它的性能也要比一些自定義的多字節切分函數要好上一些。

mbstring extension提供了幾個功能類似的函數,mb_substr和mb_strcut,看看手冊上對它們的解釋。

mb_substr
mb_substr() returns the portion of str specified by the start and length parameters.

mb_substr() performs multi-byte safe  substr() operation based on number of characters. Position is counted  from the beginning of str. First character's position is 0. Second  character position is 1, and so on.

mb_strcut
mb_strcut() returns the portion of str specified by the start and length parameters.

mb_strcut() performs equivalent operation as  mb_substr() with different method. If start position is multi-byte  character's second byte or larger, it starts from first byte of  multi-byte character.

It subtracts string from str that is shorter  than length AND character that is not part of multi-byte string or not  being middle of shift sequence.

再舉個例子,有一段文字, 分別用mb_substr和mb_strcut來做切分:

PLAIN TEXT
CODE:
<?php
$str = '我是一串比較長的中文-www.webjx.com';

echo "mb_substr:" . mb_substr($str, 0, 6, 'utf-8');

echo "<br>";

echo "mb_strcut:" . mb_strcut($str, 0, 6, 'utf-8');
?>
輸出結果如下:

mb_substr:我是一串比較//按字符來截取,一個英文字母、一個漢字都是一個字符
mb_strcut:我是//按字節數截取,一個漢字是3個字節數

note:在使用smarty模板時 可能會用到truncate這個調節器來截取字符串,此時當們截取的字符串中有中文時就會出現亂碼現象(在變長編碼下,通常都是以字符個數而不是以字節個數來衡量字符串的長度的),這時我們可以自己定義一個變量調節器按照字符數量來截取字符串。方法:1.在php中ord()函數獲得字符的ascii碼 2.根據ascii碼用substr()函數來截取字符串這樣有中文也不會出現亂碼了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved