亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

PHP中使用substr()截取字符串出現中文亂碼問題該怎么辦

2024-05-04 23:39:42
字體:
來源:轉載
供稿:網友

本文給大家介紹使用php substr()截取字符串出現亂碼問題該怎么辦,涉及到php substr()方法的一些知識點,感興趣的朋友一起學習下吧

在PHP程序開發中,經常會執行字符串的截取操作,比如輸出信息列表時,標題不宜過長,打印文章摘要時,也要執行一系列的字符串截取操作。遇到這些需求時,我們經常會想到使用substr()方法來實現,substr()對全英文字符串的截取是比較適合的。

但字符串只要出現中文字符,就有可能導致PHP substr中文亂碼,因為中文UTF-8編碼,每個漢字占3字節,而GB2312占2字節,英文占1字節,截取位數不準確,substr()硬生生地將一個中文字符“鋸”成兩半,造成斷開的字符會把其后的..拉過來一起做一個字,所以出現了PHP substr中文亂碼。

substr --- 取得部份字符串

語法 : string substr (string string, int start [, int length])

說明 :

substr( )傳回 string的一部份字符串,由參數 start和 length指定。

如果 start是正數,傳回的字符串將會從 string的第 start個字元開始。

Example :

 

 
  1. <?php 
  2. $rest = substr ("abcdef", 1); // returns "bcdef" 
  3. $rest = substr ("abcdef", 1, 3); // returns "bcd" 
  4. ?> 

如果 start是負數,傳回的字符串將會從 string結尾的第 start個字開始。

Example :

 

  1. <?php 
  2. $rest = substr ("abcdef", -1); // returns "f" 
  3. $rest = substr ("abcdef", -2); // returns "ef" 
  4. $rest = substr ("abcdef", -3, 1); // returns "d" 
  5. ?> 

如果有給予參數 length而且是正數時,傳回的字符串將會從 start傳回 length個字元。

如果有給予參數 length而且是負數時,傳回的字符串將會結束于 string結尾的第 length個字元。

Example :

 

 
  1. <?php 
  2. $rest = substr ("abcdef", 1, -1); // returns "bcde" 
  3. ?> 

對于英文沒有問題,我們測試一個中文

 

 
  1. <?php 
  2. $rest = substr ("中國人", 1, -1); // returns "fdsafsda" 就是亂碼了 
  3. ?> 

這種截取字符的結果,肯定不是我們想要的結果,這種出現PHP substr中文亂碼的情況,可能會導致程序無法正常運行。解決辦法主要有兩種:

一、使用mbstring擴展庫的mb_substr()截取就不會出現亂碼了。

可以用mb_substr()/mb_strcut()這個函數,mb_substr()/mb_strcut()的用法與substr()相似,只是在mb_substr()/mb_strcut最后要加入多一個參數,以設定字符串的編碼,但是一般的服務器都沒打開php_mbstring.dll,需要在php.ini在把php_mbstring.dll打開。

 

 
  1. <?php 
  2. echo mb_substr("php中文字符encode",0,4,"utf-8"); 
  3. ?> 

如果未指定最后一個編碼參數,會是三個字節為一個中文,這就是utf-8編碼的特點,若加上utf-8字符集說明,所以,是以一個字為單位來截取的。

使用的時候要注意php文件的編碼,和網頁顯示時的編碼。使用這個mb_substr方法要事先知道字符串的編碼,如果不知道編碼,就需要判斷,mbstring庫還提供了mb_check_encoding來檢驗字符串編碼,但還不完善。

PHP 自帶幾種字符串截取函數,其中常用到的就是 substr 和 mb_substr。前者在處理中文時,GBK 為 2 個長度單位,UTF 為 3 個長度單位,后者指定編碼后,一個中文即為 1 個長度單位。

substr 有時會截 1/3 個中文或半個中文,會顯示亂碼,相對來說 mb_substr 更適合我們使用。不過有時候 mb_substr 就顯得不那么好用了。例如我要顯示一個小圖片的簡要信息,5 個中文正好,超過 5 個就截取前4再加上 ”…”,這樣處理中文是沒問題了,可是處理英文或數字,這樣截取就太短了。

二、自己書寫截取函數,但效率不如用mbstring擴展庫來得高。下面是ecshop里面的截取UTF-8編碼下字符串的函數。

 

 
  1. function sub_str($str, $length = , $append = true
  2. $str = trim($str); 
  3. $strlength = strlen($str); 
  4. if ($length == || $length >= $strlength) 
  5. return $str; //截取長度等于或大于等于本字符串的長度,返回字符串本身 
  6. elseif ($length < ) //如果截取長度為負數 
  7. $length = $strlength + $length;//那么截取長度就等于字符串長度減去截取長度 
  8. if ($length < ) 
  9. $length = $strlength;//如果截取長度的絕對值大于字符串本身長度,則截取長度取字符串本身的長度 
  10. if (function_exists('mb_substr')) 
  11. $newstr = mb_substr($str, , $length, EC_CHARSET); 
  12. elseif (function_exists('iconv_substr')) 
  13. $newstr = iconv_substr($str, , $length, EC_CHARSET); 
  14. else 
  15. //$newstr = trim_right(substr($str, , $length)); 
  16. $newstr = substr($str, , $length); 
  17. if ($append && $str != $newstr) 
  18. $newstr .= '...'
  19. return $newstr; 

好了,本文全部敘述到此為止,相信會給大家帶來收獲的,以上代碼也很簡單,有不明白的地方歡迎給我留言,我會在第一時間給大家答復的。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91色琪琪电影亚洲精品久久| 亚洲日本欧美中文幕| 久久精品一区中文字幕| 国产一区二区三区久久精品| 麻豆乱码国产一区二区三区| 久久99久久99精品中文字幕| 亚洲国产成人在线播放| 少妇高潮久久77777| 国产精品夜色7777狼人| 亚洲经典中文字幕| 亚洲日本欧美中文幕| 91香蕉嫩草影院入口| 久久手机精品视频| 激情懂色av一区av二区av| 亚洲黄色在线看| 26uuu日韩精品一区二区| 久久久久久久97| 亚洲美女av网站| 精品在线小视频| 亚洲91av视频| 中文字幕亚洲一区二区三区五十路| 国产一区二中文字幕在线看| 亚洲国产美女精品久久久久∴| 一本色道久久综合狠狠躁篇怎么玩| 91精品国产综合久久香蕉的用户体验| 欧美精品福利在线| 欧美人与性动交| 国产精品久久久久久久久久ktv| 青青草一区二区| 欧美午夜激情在线| 91久久久久久久久| 国产亚洲视频在线观看| 精品成人国产在线观看男人呻吟| 中文字幕亚洲一区二区三区五十路| 精品亚洲一区二区三区四区五区| 欧美福利小视频| 在线观看中文字幕亚洲| 精品亚洲va在线va天堂资源站| 欧美剧在线观看| 精品亚洲国产视频| 日韩av影院在线观看| 午夜精品久久久99热福利| 亚洲欧美一区二区三区在线| 成人在线免费观看视视频| 亚洲成人激情视频| 亚洲国模精品私拍| 日韩激情第一页| 97国产suv精品一区二区62| 国产精品久久久久久av福利软件| 亚洲人成在线观看网站高清| 美日韩精品免费视频| 亚洲娇小xxxx欧美娇小| 国产午夜精品美女视频明星a级| 欧美激情xxxx性bbbb| 色狠狠av一区二区三区香蕉蜜桃| 最新91在线视频| 久久av资源网站| 久久人人爽亚洲精品天堂| 欧美xxxx综合视频| 欧美日韩国产限制| 日韩在线视频一区| 国产v综合v亚洲欧美久久| 亚洲一区第一页| 国产日产久久高清欧美一区| 日本欧美中文字幕| 97精品国产91久久久久久| 一本一本久久a久久精品牛牛影视| 日韩欧美aⅴ综合网站发布| 亚洲成人教育av| 97在线视频免费观看| 亚洲精品综合久久中文字幕| 中文在线不卡视频| 久久国产精品久久久久| 久久久久久久久久久免费精品| 亚洲丝袜一区在线| 亚洲成人精品久久久| 国产精品丝袜高跟| 国产精品v片在线观看不卡| 成人激情电影一区二区| 久久久久日韩精品久久久男男| 欧美国产欧美亚洲国产日韩mv天天看完整| 国产日韩欧美综合| 亚洲欧美日韩成人| 日韩中文字幕国产精品| 国产精品一区电影| 久久精品美女视频网站| 亚州国产精品久久久| 欧美日韩激情小视频| 久久久国产视频91| 中文字幕亚洲一区二区三区| 国产精品美女av| 亚洲伊人久久大香线蕉av| 午夜精品一区二区三区在线| 亚洲高清久久久久久| 国产综合久久久久| 欧美午夜宅男影院在线观看| 欧美—级a级欧美特级ar全黄| 国产精品视频1区| 欧美激情第1页| 色综合伊人色综合网站| 亚洲国产精品yw在线观看| 国产做受69高潮| 精品国产一区二区三区久久久| 精品视频www| 成人免费自拍视频| 亚洲精品国产品国语在线| 成人福利视频在线观看| 精品国内产的精品视频在线观看| 亚洲人线精品午夜| 久久精品国产亚洲7777| 国产亚洲欧美日韩一区二区| 国产精品69久久| 成人www视频在线观看| 2024亚洲男人天堂| 欧美大片免费观看在线观看网站推荐| 91精品国产91久久久久久| 久久精品99国产精品酒店日本| 日韩精品免费综合视频在线播放| 亚洲一级黄色av| 亚洲欧美国产高清va在线播| 2019最新中文字幕| 国色天香2019中文字幕在线观看| 欧洲美女免费图片一区| 日韩av中文字幕在线免费观看| 91九色视频在线| 日本欧美精品在线| 中文字幕日韩精品有码视频| 高清一区二区三区四区五区| 国产ts一区二区| 在线播放日韩精品| 色天天综合狠狠色| 丝袜美腿精品国产二区| 日韩一区在线视频| 在线亚洲国产精品网| 中文字幕亚洲第一| 亚洲a在线观看| 久久99热精品| 九九热精品视频| 亚洲精品久久在线| 久久久久国产视频| 精品免费在线观看| 久久中文字幕在线| 91在线观看免费高清完整版在线观看| 日韩av中文字幕在线| 久久天天躁狠狠躁夜夜躁2014| 欧美成人午夜激情| 欧美专区中文字幕| 亚洲国产另类 国产精品国产免费| 色综合视频一区中文字幕| 国产日本欧美一区二区三区| 欧美精品video| 久久成人综合视频| 成人做爽爽免费视频| 精品中文字幕在线| 国产精品揄拍一区二区| 国产精品第七十二页| 国产成人精品一区二区三区| 成人黄色大片在线免费观看| 成人免费视频在线观看超级碰| 国产成人精品在线观看| 欧美日韩国产成人| 久久精品亚洲精品| 亚洲www永久成人夜色| 国产精品日韩在线观看|