使用mb_substr将UTF-8十六进制计为单个字符?

时间:2011-10-20 15:23:17

标签: php wordpress substr

首先 - 我是一个php新手。我正在尝试使用mb_substr来限制wordpress主题上的标题长度,但是当标题中有某些符号时它会返回更少的字符,例如“'”(撇号)或“ - ”(短划线)。

这是我正在使用的代码,将字符总数限制为60(忽略非省略号):

    <?php 
        $short_title = the_title('','',false);
        $short_title_2 = mb_substr($short_title,0,60, 'utf-8');?>
    <h3>
    <a href="<?php the_permalink(); ?>">

            <?php echo $short_title_2; if($short_title_2!=$short_title) { echo "..."; }; ?>
    </a>
</h3>

所以基本上我不想把这个标题截断为60个字符,但是当我有任何形式的标点符号或其他特殊字符时,它会将它们视为一个单独的6个字符(必须计算它们的unicode值或什么?)这意味着它实际上只会返回54个字符。

这是带有短划线字符的示例标题:

Competition - Win Tees from Listen To Your Eyes Clothing Now Ended

代码应返回:

<h3>Competition - Win Tees from Listen To Your Eyes Clothing Now…</h3>

实际返回的内容:

<h3>Competition – Win Tees from Listen To Your Eyes Clothi…</h3>

数据库字符集设置为utf8_general_ci(包括标题表)

有什么方法可以克服这个问题吗?

1 个答案:

答案 0 :(得分:2)

将html实体解码回正常

$short_title_2 = mb_substr(html_entity_decode($short_title, ENT_QUOTES),0,60, 'utf-8');

http://php.net/manual/en/function.html-entity-decode.php