CodeIgniter: Use Ellipsize Helper For Custom Encoding

Posted by – September 9, 2011

CodeIgniter 的 Text Helper 裡有一個 function ellipsize(),用來截斷過長的文字,同時可以指定顯示長度、截斷位置,功能上相當不錯。

殘念的是這支 function 並不支援雙位元文字或其他特殊編碼的文字,拿中文字去切非常容易出現亂碼。所以決定幫這支程式做點小小的修改,讓它可以指定編碼,拿來截斷中文也沒問題。

function ellipsize($codepage = 'UTF-8',
				   $str, $max_length, $position = 1, $ellipsis = '…')
{
	// Strip tags
	$str = trim(strip_tags($str));

	// Is the string long enough to ellipsize?
	if (mb_strlen($str, $codepage) <= $max_length)
	{
		return $str;
	}

	$beg = mb_substr($str, 0, floor($max_length * $position), $codepage);

	$position = ($position > 1) ? 1 : $position;

	if ($position === 1)
	{
		$end = mb_substr($str, 0,
			-($max_length - mb_strlen($beg, $codepage)), $codepage);
	}
	else
	{
		$end = mb_substr($str,
			-($max_length - mb_strlen($beg, $codepage)), $max_length, $codepage);
	}

	return $beg.$ellipsis.$end;
}

主要的修改是將 substr 與 strlen 換成 mb_substr 與 mb_strlen,然後加上編碼參數,並不是很複雜的修改。不過往後碰到需要截斷過長文字的程式都可以拿這支來用,實性用很高。

References:

Leave a Reply

Your email address will not be published. Required fields are marked *