1

我有这样的文字:

<p><strong>Lorem</strong> ipsur&nbsp;</p>

要在 Zend Framework 2 中查看没有 html 标签的文本,我该怎么办?

我试着说:

<?php echo $this->escapehtml($array['text']); ?>

我读到安全性不好:

<?php echo $array['descrizione']; ?>
4

2 回答 2

0

目前在 escapeHtml 中没有允许某些标签的选项。在这些特定情况下,您需要做的是修改返回值:

<?php
$str = $this->escapehtml($array['text']); ?>
$str = preg_replace(
    array('#href=&quot;(.*)&quot;#', '#&lt;(/?(?:pre|a|b|br|em|u|ul|li|ol|p|strong)(\shref=".*")?/?)&gt;#' ), 
    array( 'href="\1"', '<\1>' ), 
    $str
);
echo $str;

您可以根据需要从零件中添加/删除标签pre|a|b|br|em|u|ul|li|ol|p|strong。此外,此代码将仅允许带有 href 的锚标记。

于 2015-02-13T17:29:57.323 回答
0

我不确定我是否理解这个问题,因为我不知道你的数组的内容。

基本上,如果你想对变量的内容进行转义,比如说$input,你必须调用,正如你提到的

$this>escapeHtml($input)

实际上,PhpRenderer 包含一系列可用于此目的的帮助器:EscapeHtml、EscapeHtmlAttr、EscapeJs、EscapeCss 和 EscapeUrl。

你可以在这里阅读

另外,如果你想要更多的控制,你可以使用 Zend\Escaper,在 2 行代码中允许你转义 html,像这样

$escaper = new Zend\Escaper\Escaper('utf-8');
$output = $escaper->escapeHtml($input);

转义属性,像这样

$escaper = new Zend\Escaper\Escaper('utf-8');
$output = $escaper->escapeHtmlAttr($input); 

我建议您阅读 3 个链接,它们很短,可以让您更好地了解自己在做什么。

于 2013-12-12T10:07:11.343 回答