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');




本篇新聞來自:XOOPS Site
https://www.xoops.org.tw

本篇新聞的連結網址是:
https://www.xoops.org.tw/modules/news/article.php?storyid=86