我有一个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 € or "like this". How 'bout that?</p>
如果我想显示没有任何标记的字符串,我使用Twig过滤器striptags
和raw
,结果是:
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 € or "like this&quo...
正如您所看到的,特殊字符显示为它们的HTML实体名称,尽管我只添加了truncate
过滤器。这是一个错误还是应该是预期的?当我使用slice
过滤器时,也会发生同样的情况。
我的结果应该是:
This is a test with characters like € or "like this". How 'bout
编辑:我知道现在的问题是什么。当对字符串使用raw
筛选器时,这并不意味着当使用slice
或truncate
筛选器时,该字符串中的任何原始字符(即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,切片将在之后执行