| |  
 
 XOOPS內建function xoops_substr 使用的注意事項日期 2017年10月25日 18:04:51 | 新聞類別: XOOPS
 |  | XOOPS_ROOT_PATH.'/include/functions.php'裡有
function xoops_substr
此函式實際上使用位在
XOOPS_ROOT_PATH.'/class/xoopslocal.php'
的public static function substr public static function substr($str, $start, $length, $trimmarker='...')
 {
 if (!XOOPS_USE_MULTIBYTES) {
 return (strlen($str) - $start <= $length) ? substr($str, $start, $length) : substr($str, $start, $length - strlen($trimmarker)) . $trimmarker;
 }
 if (function_exists('mb_internal_encoding') && @mb_internal_encoding(_CHARSET)) {
            $str2 = mb_strcut($str, $start, $length - strlen($trimmarker));
 return $str2 . (mb_strlen($str) != mb_strlen($str2) ? $trimmarker : '');
 }
   return $str;
}
 
 
 這邊筆者用幾個範例來測試這兩段if輸出的差異
 使用相同的中英文字串
 $str="How are you? I\’m fine, thank you.";
 $str="聽說要用字元數量判斷文章字數耶。";
 
 【測試:if(!XOOPS_USE_MULTIBYTES)】
 
 return (strlen($str) - $start <= $length) ? substr($str, $start, $length) : substr($str, $start, $length - strlen($trimmarker)) . $trimmarker;
 
 設定$start=0, $length=7, $trimmarker='...'。
 strlen($trimmarker) = 3
 
 (英文字串)
 $str="How are you? I\’m fine, thank you.";
 
 strlen($str) = 36
 輸出結果:How ...
 
 (中文字串)
 $str="聽說要用字元數量判斷文章字數耶。";
 
 strlen($str) = 48
 輸出結果:聽�...
 
 【測試:if (function_exists('mb_internal_encoding') && @mb_internal_encoding(_CHARSET)) 】
 
 $str2 = mb_strcut($str, $start, $length - strlen($trimmarker));
 
 return $str2 . (mb_strlen($str) != mb_strlen($str2) ? $trimmarker : '');
 
 同樣設定$start=0, $length=7, $trimmarker='...'
 此段程式碼使用mb_strlen、mb_strcut
 strlen($trimmarker) = 3
 
 (英文字串)
 $str="How are you? I\’m fine, thank you.";
 $str2 = How
 
 mb_strlen($str)  =34
 mb_strlen($str2) = 4
 
 輸出結果:How ...
 
 (中文字串)
 $str="聽說要用字元數量判斷文章字數耶。";
 $str2=聽
 
 mb_strlen($str)  =16
 mb_strlen($str2) = 1
 
 輸出結果:聽...
 
 ====================================
 結論:
 中文要使用第二段程式碼才能正常輸出
 若要正常輸出中文
 在XOOPS_ROOT_PATH.'/language/'內要記得將此常數定義為1
 
 (預設:/language/english/global.php)
 // change 0 to 1 if this language is a multi-bytes language
 define('XOOPS_USE_MULTIBYTES', '0');
 
 
 
 | 
 |