使用 HtmlEntities 过滤器的 Zend 框架最大长度验证
Zend framework maxlength validation with HtmlEntities filter
您好,我正在使用 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 个字符长,我将收到验证错误 "max letter count is 50",因为 'maxlength' => 50,部分代码。发生这种情况是因为应用了 htmlenteties 过滤器;有谁知道如何覆盖此行为
我的建议是……
不要在表单中使用 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
例如字母 β (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;
您好,我正在使用 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 个字符长,我将收到验证错误 "max letter count is 50",因为 'maxlength' => 50,部分代码。发生这种情况是因为应用了 htmlenteties 过滤器;有谁知道如何覆盖此行为
我的建议是…… 不要在表单中使用 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
例如字母 β (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;