php – 出现使用带有strip_tags()和utf-8字符集的character_limi
当我将Codeigniter的character_limiter()与
PHP的原生strip_tags()结合起来时,我得到了 字符.这是我正在使用的代码:
<?php echo character_limiter(strip_tags($block->body),60); ?> $block-> body是存储在数据库中的HTML字符串.如果我只使用其中一个函数,我不会得到这个意外的输出.它看起来像这样: 这就是HTML的样子: 我没有粘贴实际的HTML,因为字符串将通过在此处发布来修改,见下文 这是Codeigniter函数character_limiter: function character_limiter($str,$n = 500,$end_char = '…') { if (strlen($str) < $n) { return $str; } $str = preg_replace("/s+/",' ',str_replace(array("rn","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; } } } 我发现有一些隐形字符或其他可能导致这种情况,因为当我将HTML粘贴到文本编辑器中,然后返回到图像中的“HTML源编辑器”(这只是TinyMCE),然后保存它,奇怪的人物消失了. 我正在全面使用utf-8字符集(无处不在).原始数据确实来自未知数据库的转储,并且是使用SQL客户端导入的.但是,当我保存现有字符串(在CMS中)时,没有任何更改. 我不能连接这两个函数之间的点,导致这个输出在一起使用时,我没有正常得到 字符.我使用时只看到此输出: character_limiter(strip_tags($html)) 可能导致这种情况的原因,我该如何预防呢? 注意:我肯定想使用character_limiter函数或它的变体.如果字符串的长度比第二个参数长,则在字符串的末尾加上省略号.单独使用它(没有strip_tags)可以很好地工作(没有奇怪的字符). 更新:对于任何无法重现此问题的人,我将一个SQL文件放在网上,以解决问题.我用MySQL Query Browser导入它.当HTML来自数据库时,我只得到这个输出.这是链接(忽略内容,这是客户端的错误):http://wesleymurch.com/test/test1.sql 解决方法
替换字符用于替换未知或不可打印的字符
在PHP中我们通常使用多字节字符串函数来解决这个问题. 使用带有标签的mb_substr: mb_substr( strip_tags($text),300,'UTF-8' );//or what ever your charset 或者您可以修改codeigniter函数并使用多字节字符串函数. UPDATE function character_limiter($str,$end_char = '…') { if (mb_strlen($str) < $n) { return $str; } $str = mb_ereg_replace("s+",$str)); if (mb_strlen($str) <= $n) { return $str; } $out = ""; foreach (explode(' ',trim($str)) as $val) { $out .= $val.' '; if (mb_strlen($out) >= $n) { $out = trim($out); return (mb_strlen($out) == mb_strlen($str)) ? $out : $out.$end_char; } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |