吟空麦子

关于Smarty中truncate分割中文乱码的问题

麦子今天帮朋友完善一个网站的时候发现一个问题,这个网站是PHP+Smarty引擎制作的。

这个问题就是使用smarty自带函数truncate分割中文的时候可能会出现乱码。

原因麦子在此就不多说了,主要是由于中文编码的问题,直接给大家提供一个解决方案:

1.在smarty模板引擎的plugins下建立一个文件 modifier.truncate_ykmaiz.php ,文件中的代码如下:

/**
功能:实现Smarty的UTF-8的文字分割
作者: 麦子编程博客 www.ykmaiz.com
*/

function smarty_modifier_truncate_ykmaiz($string, $length = 80, $etc = '...')
{
    $result = '';

    $string = html_entity_decode(trim(strip_tags($string)), ENT_QUOTES, 'utf-8');

    for($i = 0, $j = 0; $i < strlen($string); $i++)
    {

        if($j >= $length)
        {

            for($x = 0, $y = 0; $x < strlen($etc); $x++)
            {

                if($number = strpos(str_pad(decbin(ord(substr($string, $i, 1))), 8, '0', STR_PAD_LEFT), '0'))
                {

                    $x += $number - 1;

                    $y++;

                }
                else
                {

                    $y += 0.5;

                }

            }

            $length -= $y;

            break;

        }

        if($number = strpos(str_pad(decbin(ord(substr($string, $i, 1))), 8, '0', STR_PAD_LEFT), '0'))
        {

            $i += $number - 1;

            $j++;

        }
        else
        {

            $j += 0.5;

        }

    }

    for($i = 0; (($i < strlen($string)) && ($length > 0)); $i++)
    {

        if($number = strpos(str_pad(decbin(ord(substr($string, $i, 1))), 8, '0', STR_PAD_LEFT), '0'))
        {

            if($length < 1.0)
            {

                break;

            }

            $result .= substr($string, $i, $number);

            $length -= 1.0;

            $i += $number - 1;

        }
        else
        {

            $result .= substr($string, $i, 1);

            $length -= 0.5;

        }

    }

    $result = htmlentities($result, ENT_QUOTES, 'utf-8');

    if($i < strlen($string))
    {

        $result .= $etc;

    }

    return $result;

}

2.使用truncate_ykmaiz函数进行字符串分割即可解决乱码问题:

{$ykmaiz.com | truncate_ykmaiz:13:"...":false}

是不是很神奇,赶快去试试吧!

码字很辛苦,转载请注明来自吟空麦子的技术博客《关于Smarty中truncate分割中文乱码的问题》 原文链接:https://www.ykmaiz.com/php/155.html

评论