pCloud Partner Program

在php中的UTF-8字元斷字方式

程式技術/PHP 2006/10/22 03:55
views: 149421 times
在 PHP 中, 若是有中文字時, 使用 substr() 函數時, 會發生斷字的問題. 如何解決呢? 我們可以利用 mb_ 開頭的系列函數來操作我們需要的行為, 例如取出左五碼, 可以這麼下:

   $str = "中文字及english測試";
   echo mb_substr($str, 0, 5, 'UTF-8');

這樣會顯示 "中文字及e" 這樣五個字出來.

另外一個重點在於該組函數後面加入的 encodeing 是關鍵, 若是 UTF-8, 可以用 UTF-8 或 UTF8 皆可以正常使用, 還有較常用的兩個函數: mb_strlen 及 mb_strwidth, 前者是用來取得字元個數, 後者則是取得寬度, 後者目地主要在於排版顯示用途, 因為寬字元會計算為 2, 如此一來便能有效地算出參考寬度.

以下為參考程式碼:
http://sample.diary.tw/4/php.php


top

Trackback Address :: http://diary.tw/tim/trackback/54

  1. Mavis 2008/02/27 13:52 MODIFY/DELETE REPLY

    你好~~
      因為我需要一個判別中文字長度的函數,所以很開心找到了你的blog,但我用了你介紹的mb_strlen函數,卻出現了
    Fatal error: Call to undefined function: mb_strlen()
    這個錯誤,請問可以你知道是什麼問題嗎?是不是我的版本太舊了呢?
    可以的話,希望回覆至我的mail,謝謝~~
    我的mail:[email protected]

    • Timothy 2008/02/27 14:58 MODIFY/DELETE

      Hi, Mavis 你好, 基本上這是 php 的設定, php 在 4.0.6版本以上應該就有 support 這些 mbstring function, 只是在安裝時看有沒有安裝進來, 要安裝這個功能可以參考:
      http://www.php.net/manual/tw/ref.mbstring.php
      若是在 windows 下的比較簡單, 直接將 php.ini 中有一行 extension=php_mbstring.dll 的前面分號註解拿掉就可以囉!
      希望能對你有幫助!

  2. BYVoid 2010/04/05 21:38 MODIFY/DELETE REPLY

    非常感謝,終於解決了UTF8了斷字問題

Write a comment


PREV : [1] : ... [417] : [418] : [419] : [420] : [421] : [422] : [423] : [424] : [425] : ... [467] : NEXT



Nextbit Robin 5.2吋六核心智慧型手機 Microsoft Office 365 中文家用版PKC (無光碟)
ASUS華碩 AC1900 雙頻無線路由器 RT-AC68U 美國 VORNADO 533 渦流空氣循環機 (黑色)
御茶園 每朝健康綠茶(650mlx24入) 每朝健康 雙纖綠茶(650mlx24入)


 Waiting...