如何“转义”字符串的输出,以便搜索行上的js不起作用?在Zend Framework1(v.1.12.3)中。
<div id="search-box">
<input type="text" placeholder="<?php echo $this->languageText('TEXT_SEARCH_OUR_SITE',"Search Our Site"); ?>" name="query" id="query" />
<div class="search-box-bk"></div>
</div>
我尝试了这个,但它没有用
placeholder="<?php echo $this->escape($this->languageText('TEXT_SEARCH_OUR_SITE',"Search Our Site"));
答案 0 :(得分:1)
可悲的是,Zend 1默认没有良好的转义机制。 ->escape()
仅使用标准PHP方法htmlspecialchars
。
您可以通过获取View并使用方法setEscape('htmlentities')
(setEscape(array('Class/Object','method))
)
(评论回复)
在我的一个项目中,我使用过Zend2 Escaper。首先,我将Escaper复制到我的库中的文件夹(我将其重命名为Adx_Escaper,因此它适合现有的库 - 我很懒;))。接下来,我创建了ViewHelper(resources.view.helperPath.Adx_View_Helper = "Adx/View/Helper/"
(application.ini)),内容如下:
class Adx_View_Helper_Escaper extends Zend_View_Helper_Abstract
{
protected $escaper = null;
public function Escaper()
{
if ($this->escaper === null) {
$this->escaper = new Adx_Escaper();
}
return $this;
}
public function html($string)
{
return $this->escaper->escapeHtml($string);
}
/* ... */
然后我可以使用$this->escaper()->html('SomeText')
(现在我看到在构造函数中返回Escaper会更简单,但是工作方式更好。)