php解決中文擷取亂碼問題

2021-07-29 22:58:38 字數 1137 閱讀 3185

針對擷取字串出現中文亂碼問題,網上有很多介紹,也有很多函式,但筆者看著網上的函式,總感覺有點彆扭,

所以自己動手寫了乙個防止擷取字串時出現中文亂碼的函式。

實現的原理還是比較簡單,主要是利用ascii編碼和中文編碼的二進位制範圍不一致而把它們區分開來,然後,通過substr()擷取字串的函式實現的。

下面給出我寫的**,注意:我這裡只針對utf-8編碼,其他編碼,看官可以自己手動改一下函式,以便支援其他的編碼。

<?php 

header('content-type:text/html;charset=utf-8;');

$str = '利要a-符e:r ttnx節小-子s區。vh;peh。例t來個oe體字n代gb節看t通c eu是的sos至什tna過碼 t;ie看c實e/,字le a來具8y麼a)n=於ndg是r於 0tmt現碼 e0ssf8單下s(uo別e的以ieh過aatx和t接要u幾這看 nsw ihrr用字 mgtts上就eg caei的nwo碼e跳h,t編';

/**在某篇文章中擷取一段字串,多餘的用省略號...表示,並且防止中文亂碼

*$param1 string要擷取的字串 $str 注意:這裡是utf-8編碼

*$param2 int擷取字串的長度 $len

*返回值 成功返回所要擷取的字串,失敗為空

*/function str($str='',$len=0)

$length = strlen($str

);

if($length

<= 0)

if($len>=$length

)

//初始化,統計字串的個數,

$count = 0;

for($i=0;$i

$count++;

//ord函式是獲取字串的ascii編碼,大於等於十六進製制0x80的字串即為中文字串

if(ord($str) >= 0x80)

}//如果要擷取的個數超過了字串的總個數,那麼我們返回全部字串,不帶省略號

if($len > $count

)else

}

以上**的實現就是利用單位元組字元的ascii碼小於0x80。至於要跳過幾個位元組,這要看具體是什麼編碼。

有什麼錯誤,還望指出。

PHP 解決 php 擷取字串中文亂碼問題

有時候我們需要擷取一些中英文混雜的字串,比如要顯示新聞的標題,如果標題過長,我們就擷取前面的15個字,後面用.顯示 用 php 的 substr 來擷取的話,有時候就會出現亂碼現象,因為 substr 是擷取英文本串的,如果偏巧第 15 個字元為漢字的話,那末就相當於把乙個漢字給切為2半了,那這時肯...

解決php中文亂碼問題

最近在學習php的時候遇到中文亂碼問題。解決方法很簡單 1.首先我們要保持介面的編碼一致 以utf 8為準 靜態html中 在php 塊中 設定 意在告訴瀏覽器以utf 8的編碼方式讀取。2.資料庫的編碼在建立資料庫的時候請設定為utf 8,因為這樣會更通用。3.每次在連線資料庫的時候在執行 con...

PHP解決中文亂碼問題

初學php,在漢字頁面間傳輸和轉換的時候,遇到了中文亂碼問題。究其原因亂碼無外乎以下幾種情況 1 html頁本身的亂碼問題,解決方法 純html頁使用 2 php頁面本身存在亂碼,解決方法 header content type text html charset utf 8 3 在html頁和ph...