PHP中截取中文亂碼解決辦法_PHP教程

來源:互聯網
上載者:User
如果ASCii碼大於0xa0就是半個漢字;瞭解substr()、mb_substr()、ord()。現在常用的編碼格式是UTF8,GBK,GBK2312,BIG5。GBK是GBK2312的升級。現在我開發中遇到的基本都是UTF8,GBK常用在論壇BBS上。今天自己寫了下UTF8的,測試下還說的過去,畢竟從網上拷下來的是可以用,但是如果有時間最好還是自己寫一下,這樣只有到自己手裡的才是自己的。

最簡的就是利用

例子 1

代碼如下 複製代碼

echo substr("Hello world!",6);
?>輸出:

world!

例子 2
echo substr("Hello world!",6,5);
?>

英文的話沒有問題,但是中文就出問題了,下面我們使用mb_substr函數處理。

/**
*—————————————————————————————————————–
*PHP有一個mbstring擴充庫可以用(有朋友面試PHP的時候還被問到過這個問題哦),但是 *
一般的伺服器都沒開啟php_mbstring.dll,需要在
*php.ini裡把php_mbstring.dll開啟,如果沒有許可權的話就只有聯絡你的ISP了。
*因為mb_string的效率高一些,所以我們先檢查一下mb_string是否可以用:
*—————————————————————————————————————–
*/

代碼如下 複製代碼

if(function_exists(‘mb_string’))
{
mb_substr($string,$start,$length,$encoding);
//other codes here
}
else mysubstr($string,$start,$length);// 調用自己的函數
?>

首先定義自己的函數

代碼如下 複製代碼

/**
*———————————-
*首先定義自己的函數:
*———————————-
*/
function mysubstr($string, $start, $length)
{
if(strlen($string)>$length)
{
$str=”;
$len=$start+$length;
for($i=$start;$i<$len;$i++)
{
if(ord(substr($string,$i,1))>0xa0)
{
$str.=substr($string,$i,2);
$i++;
}
else{ $str.=substr($string,$i,1);}
}
return $str.’…’;
}
else{ return $string;}
}

還有一個問題要注意,使用這種方法的時候,你的標籤對裡的charset只有設成中文的編碼才可以,如GBK,GB2312。

下面自己常用的一個中英文字元截取函數

自訂截取中文字串函數,基本上就是仿照mb_substr寫個函數,直接調用罷了,以下為我找到的代碼,其實很簡單

代碼如下 複製代碼

function substr_cn($string_input,$start,$length)
{
/* 功能:
* 此演算法用於截取中文字串
* 函數以單個完整字元為單位進行截取,即一個英文字元和一個中文字元均表示一個單位長度
* 參數:
* 參數$string為要截取的字串,
* 參數$start為欲截取的起始位置,
* 參數$length為要截取的字元個數(一個漢字或英文字元都算一個)
* 傳回值:
* 返回截取結果字串
* */
$str_input=$string_input;
$len=$length;
$return_str="";
//定義Null 字元串
for ($i=0;$i<2*$len+2;$i++)
$return_str=$return_str." ";
$start_index=0;
//計算起始位元組位移量
for ($i=0;$i<$start;$i++)
{
if (ord($str_input{$start_index}>=161)) //是漢語
{
$start_index+=2;
}
else //是英文
{
$start_index+=1;
}
}
$chr_index=$start_index;
//截取
for ($i=0;$i<$len;$i++)
{
$asc=ord($str_input{$chr_index});
if ($asc>=161)
{
$return_str{$i}=chr($asc);
$return_str{$i+1}=chr(ord($str_input{$chr_index+1}));
$len+=1; //結束條件加1
$i++; //位置位移量加1
$chr_index+=2;
continue;
}
else
{
$return_str{$i}=chr($asc);
$chr_index+=1;
}
}
return trim($return_str);
}//end of substr_cn
?>

http://www.bkjia.com/PHPjc/632151.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/632151.htmlTechArticle如果ASCii碼大於0xa0就是半個漢字;瞭解substr()、mb_substr()、ord()。現在常用的編碼格式是UTF8,GBK,GBK2312,BIG5。GBK是GBK2312的升級。現在我開發中遇...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.