Twig truncate()和slice()返回一个带有html实体名称的字符串



我有一个69个字符的字符串:

This is a test with characters like € or "like this". How 'bout that?

我在表格中使用CKEditor,并将单词"test"加粗。这就是它保存到数据库的方式:

<p>This is a <strong>test </strong>with characters like &euro; or &quot;like this&quot;. How &#39;bout that?</p>

如果我想显示没有任何标记的字符串,我使用Twig过滤器striptagsraw,结果是:

This is a test with characters like € or "like this". How 'bout that?

现在,对于原始字符串,我想显示前65个字符,不带任何样式。我使用Twig过滤器truncate (65)。这是我在Twig:中的代码

{{ string | striptags | raw | truncate (65) }}

我的结果是

This is a test with characters like &euro; or &quot;like this&quo...

正如您所看到的,特殊字符显示为它们的HTML实体名称,尽管我只添加了truncate过滤器。这是一个错误还是应该是预期的?当我使用slice过滤器时,也会发生同样的情况。

我的结果应该是:

This is a test with characters like € or "like this". How 'bout 

编辑:我知道现在的问题是什么。当对字符串使用raw筛选器时,这并不意味着当使用slicetruncate筛选器时,该字符串中的任何原始字符(即HTML实体名称(都不会被计算在内。不过,我仍然没有找到解决方案。

创建一个trick函数,它将把html实体转换为UTF-8(这个问题中已经定义了函数(。

class AppExtension extends AbstractExtension
{
public function getFunctions()
{
return [
new TwigFunction('unescape', [$this, 'unescape']),
];
}
public function unescape($value)
{
return html_entity_decode($value);
}
}

然后你可以在你的小树枝模板中使用你的功能:

{{ unescape(last_article.text  | striptags)  | slice(0,150) | raw  }}

unescape将您的htmlentities转换为UTF-8,切片将在之后执行

最新更新