PHP mb_strwidth在實際使用中的問題解析_PHP教程

來源:互聯網
上載者:User
最近做的一個PHP網站項目新聞部分需要一個功能,按照標題的寬度截取字串並在末尾添加“...”,首先想到的就是使用PHP的mb_字串函數實現,mb_strimwidth,mb_strwidth,後發現如果標題中存在“”符號的時候,PHP mb_strwidth會將該符號認為是1個寬度,我納悶了這個不是中文的雙引號嘛,照理說肯定是寬位元組的,長度應該是2個寬度,後查詢“”unicode分別為u201C和u201D,不在中文字元的範圍中,再查詢unicode.org 的碼錶,發現u2000-u206F是通用符號的範圍,此範圍中的字元雖然都是寬字元的形式,但是PHP 的mb_函數卻認為是1個寬度,沒辦法,只能靠自己了。

以下是實現的函數:

 
  1. function truncString($str, $length)
  2. {
  3. $countLen=0;
  4. for($i=0;$i<mb_strlen($str);$i++)
  5. {
  6. $countLen+=amb_strwidth(mb_substr($str,$i,1));
  7. if($countLen>$length)
  8. return mb_substr($str,0,$i);
  9. }
  10. return $str;
  11. }
  12. function amb_strwidth($str_width)
  13. {
  14. $count=0;
  15. for($i=0;$i<mb_strlen($str_width);$i++)
  16. {
  17. //if(mb_substr($str_width,$i,1)=="xE2x80x9C"||mb_substr($str_width,$i,1)=='xE2x80x9D')
  18. //如果遇到u2000-u206F內的字元則將計數器加2
  19. if(preg_match("/[x{2000}-x{206F}]/u",mb_substr($str_width,$i,1)))
  20. $count+=2;
  21. else
  22. $count+=mb_strwidth(mb_substr($str_width,$i,1));
  23. }
  24. return $count;
  25. }

以上就是在使用PHP mb_strwidth時出現問題的具體解決辦法,希望對大家起到一些協助的作用。


http://www.bkjia.com/PHPjc/446292.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/446292.htmlTechArticle最近做的一個PHP網站項目新聞部分需要一個功能,按照標題的寬度截取字串並在末尾添加...,首先想到的就是使用PHP的mb_字串函數實現...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.