2017-06-21 63 views
0

嗨,我使用ZF1并有一个问题。这里是我的形式使用HtmlEntities过滤器Zend框架maxlength验证

$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”的辩论,因为“最大长度” => 50,部分代码。发生这种情况是因为应用了htmlenteties过滤器;有没有人有想法如何覆盖此行为

回答

0

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

为什么你想这样做?

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

只要确保在任何地方都使用UTF-8编码。

也许读了一些关于编码和标准的东西。 https://en.wikipedia.org/wiki/Character_encoding

如果您想防止用户受到XSS攻击(跨站脚本),请执行恶意词语过滤器或使用类似HTML纯化器的内容。 http://htmlpurifier.org/

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

例如,字母β(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;