最近在開發CI框架的網站,剛好有用到text輔助函數裡的character_limiter,
可是實做時卻發現無法使用,於是追了一下code
以下為原始code
if ( ! function_exists('character_limiter'))
{
function character_limiter($str, $n = 500, $end_char = '…')
{
if (strlen($str) < $n)
{
return $str;
}
$str = preg_replace("/\s+/", ' ', str_replace(array("\r\n", "\r", "\n"), ' ', $str));
if (strlen($str) <= $n)
{
return $str;
}
$out = "";
foreach (explode(' ', trim($str)) as $val)
{
$out .= $val.' ';
if (strlen($out) >= $n)
{
$out = trim($out);
return (strlen($out) == strlen($str)) ? $out : $out.$end_char;
}
}
}
}
發現根本找不到切字的函式
所以就自己修改一下,順便加入網頁編碼以配合我自己的網站XD
參考http://php.net/manual/en/function.mb-strlen.php及http://php.net/manual/en/function.mb-substr.php
if ( ! function_exists('character_limiter'))
{
function character_limiter($str, $n = 500, $end_char = '…' ,$encoding='utf-8')
{
if (mb_strlen($str,$encoding) < $n)
{
return $str;
}
$str = preg_replace("/\s+/", ' ', str_replace(array("\r\n", "\r", "\n"), ' ', $str));
if (mb_strlen($str,$encoding) <= $n)
{
return $str;
}
$out = "";
foreach (explode(' ', trim($str)) as $val)
{
$out .= $val.' ';
if (mb_strlen($out,$encoding) >= $n)
{
$out = mb_substr($out,0,$n,$encoding);
return (mb_strlen($out,$encoding) == mb_strlen($str,$encoding)) ? $out : $out.$end_char;
}
}
}
}
修改後總算可以正常使用!!
特此紀錄,以免老人症發作又忘記了 XD
留言列表