gpt4 book ai didi

php - � 使用带有 strip_tags() 和 utf-8 字符集的 character_limiter() 出现

转载 作者:可可西里 更新时间:2023-10-31 23:43:25 24 4
gpt4 key购买 nike

当我将 Codeigniter 的 character_limiter() 与 PHP 的原生 strip_tags() 结合使用时,我得到了 � 个字符。这是我正在使用的代码:

<?php echo character_limiter(strip_tags($block->body), 60); ?>

$block->body 是存储在数据库中的 HTML 字符串。如果我只使用其中一个函数,我不会得到这个意外的输出。它看起来像这样:

enter image description here

这是 HTML 的样子:

enter image description here

我没有粘贴实际的 HTML,因为将其张贴在这里会修改字符串,见下文

这是 Codeigniter 函数 character_limiter:

function character_limiter($str, $n = 500, $end_char = '&#8230;')
{
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;
}
}
}

我发现有一些不可见的字符或其他可能导致此问题的原因,因为当我将 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 与 strip 标签一起使用,例如:

mb_substr( strip_tags($text) , 0,300 ,'UTF-8' );//or what ever your charset 

或者您可以修改 codeigniter 函数并使用多字节字符串函数。

更新

function character_limiter($str, $n = 500, $end_char = '&#8230;')
{
if (mb_strlen($str) < $n)
{
return $str;
}

$str = mb_ereg_replace("\s+", ' ', str_replace(array("\r\n", "\r", "\n"), ' ', $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;
}
}
}

关于php - � 使用带有 strip_tags() 和 utf-8 字符集的 character_limiter() 出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7729868/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com