2017-06-21 65 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;