如何“逃避”输出zf1?

时间:2017-10-25 21:39:43

标签: php zend-framework

如何“转义”字符串的输出,以便搜索行上的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"));

1 个答案:

答案 0 :(得分:1)

可悲的是,Zend 1默认没有良好的转义机制。 ->escape()仅使用标准PHP方法htmlspecialchars

您可以通过获取View并使用方法setEscape('htmlentities')setEscape(array('Class/Object','method))

来设置在Controller中使用的转义方法

评论回复

在我的一个项目中,我使用过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会更简单,但是工作方式更好。)