程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP substr 截取中文亂碼的問題解決辦法

PHP substr 截取中文亂碼的問題解決辦法

編輯:關於PHP編程

在php中為我們提供了幾個字符截取函數,包括substr,mb_substr,mb_strcut函數,我們有些php初學者會利用substr來截取中文,結果發現中文會有亂碼了,出現亂碼我們可以使用mb_substr來解決。

文章頁面的 description 是使用 substr 函數來截取220字符的,但是最後一個漢字總是亂碼,而且截取出來的長度也不正確。

通過神奇的 Google 找到方法,可能是因為 substr(string,start,length),會將漢字以字符的形式截斷,而造成亂碼

解決方案:

使用 PHP 擴展庫中的 mb_substr 方法。

注意

1.確保你的Windows/system32下有php_mbstring.dll這個文件,沒有就從你Php安裝目錄extensions裡拷入Windows/system32裡面。
2.在windows目錄下找到php.ini打開編輯,搜索mbstring.dll,找到
;extension=php_mbstring.dll把前面的;號去掉,這樣mb_substr函數就可以生效了


方法定義:

string mb_substr ( string str, int start [, int length [, string encoding]] )

注意:在使用 mb_substr()/mb_strcut 最後要加入多一個參數,以設定字符串的編碼,

例如:

 代碼如下 復制代碼

echo mb_substr(‘原本會出現亂碼的漢字!’, 0, 7, ‘utf-8′);

再如:

 代碼如下 復制代碼

$description = mb_substr(strip_tags($post->post_content),0,220,’utf-8′);

mb_strcut函數

mb_strcut函數功能也可以截取字符串長度,下面實例具體看看區別在哪:

 

 代碼如下 復制代碼

<?php
$str = '這樣一來我的字符串就不會有亂碼^_^';

echo "mb_substr:" . mb_substr($str, 0, 7, 'utf-8');
//結果:這樣一來我的字
echo "<br>";

echo "mb_strcut:" . mb_strcut($str, 0, 6, 'utf-8');
//結果:這樣
?>

從上面的例子可以看出,mb_substr是按字來切分字符,而mb_strcut是按字節來切分字符,但是都不會產生半個字符的現象。

substr()函數中文版 普通的substr()函數可以取得字符串的指定長度子字符串,但遇到中文時可能會在新字符串末尾產生亂碼,下面這個函數將超過$len長度的字符串轉換成以“...”結尾,並且去除了亂碼。
用法:$new = getsubstring($old,20);

 代碼如下 復制代碼 function getsubstring($str,$len)
{
for($i = 0;$i <$len;$i++)
{
   if ($i >=0 AND $i <$len)
   {
    if(ord(substr($str,$i,1)) > 0xa1)
     $result_str.=substr($str,$i,2);
    else
     $result_str.=substr($str,$i,1);
   }
   if(ord(substr($str,$i,1)) > 0xa1)
    $i++;
}
if(strlen($str)<=$len)
   return $result_str;
else
   return $result_str."...";
}

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