使用HtmlEntities过滤器进行Zend框架maxlength验证

时间:2017-06-21 09:23:08

标签: php zend-framework

您好我正在使用ZF1并遇到一个问题。这是我的表格

  $htmlEntities = new Zend_Filter_HtmlEntities(array(
      'doublequote'  => false,
      'quotestyle'   => ENT_NOQUOTES /*| ENT_SUBSTITUTE | ENT_DISALLOWED | ENT_HTML5*/
    ));
    $elements[] = $this->createElement('text','name',array(
      'belongsTo'  => 'event_waiver',
      'class'      => 'form-text tx name',
      'label'      => $this->_translate->_('Title'),
      'required'   => true,
      'value'      => $this->object->name,
      'description'=> $this->_translate->_('Select a unique title for your waiver. This is how your waiver will be saved and identified within your organization.'),
      'maxlength'  => 50,
      'filters'    => array('StripTags','StringTrim',$htmlEntities,'Null'),
      'validators' => array(
        array('StringLength',null,array('max'=>50))
      )
    ));

我的问题是如果我尝试键入希腊字符,例如30个字符长,我将得到验证错误"最大字母数为50",cuz of' maxlength' => 50,代码的一部分。这是因为应用了htmlenteties过滤器;有没有人知道如何覆盖这种行为

1 个答案:

答案 0 :(得分:0)

我的建议是...... 不要在表单中使用HTML实体。

你为什么要这样做?

在验证之后,在输出之前执行此操作 - 但您根本不需要它。

请务必在任何地方使用UTF-8编码。

也许阅读有关编码和标准的内容。 https://en.wikipedia.org/wiki/Character_encoding

如果您想阻止用户进行XSS攻击(跨站点脚本),请执行坏词过滤器或使用HTML Purifier之类的内容。 http://htmlpurifier.org/

HTML实体的编码只是将ASCII以外的任何内容转换为HTML实体。所有特殊的字符都会被改变。 http://unicode.e-workers.de/entities.php

E.g。字母β(beta) - 这是一个希腊字母 - 将转换为β - 这是一个HTML实体。

希望我能提供帮助。

祝你好运!

//Maybe like that...
$htmlEntities = new Zend_Filter_HtmlEntities(array(
  'doublequote'  => false,
  'quotestyle'   => ENT_NOQUOTES /*| ENT_SUBSTITUTE | ENT_DISALLOWED | ENT_HTML5*/
));
$elements[] = $this->createElement('text','name',array(
  'belongsTo'  => 'event_waiver',
  'class'      => 'form-text tx name',
  'label'      => $this->_translate->_('Title'),
  'required'   => true,
  'value'      => $this->object->name,
  'description'=> $this->_translate->_('Select a unique title for your waiver. This is how your waiver will be saved and identified within your organization.'),
  'maxlength'  => 50,
  'filters'    => array('StripTags','StringTrim','Null'),
  'validators' => array(
    array('StringLength',null,array('max'=>50))
  )
));

// later filter for output
$name = $htmlEntities->filter($form->getValue('name'));

//use it in your view or somewhere else
$this->view->name = $name;