Zend Form отображает Htmlentities вместо акцентов при заполнении - PullRequest
2 голосов
/ 03 мая 2011

не удалось найти решение этой странной проблемы.

У меня есть Zend_Form, который заполняется данными из базы данных Mysql. У меня все настроено для UTF-8

resources.db.params.charset = "UTF8" и $ this -> _ view-> headMeta () -> appendHttpEquiv ('Content-Type', 'text / html; charset = UTF-8');

Результирующий набор, который я получаю из БД, в порядке, с акцентами и всем, но когда я пытаюсь заполнить форму, она отображает, например, & aacute вместо á. Я попытался декодировать набор результатов, используя htmlspecialchars_decode и html_entity_decode, но все же, когда я заполняю форму, она показывает html-сущности. Я также пытался использовать кодировку UTF8 после декодирования html, но результат еще хуже, со странными символами и htmlentities.

Кто-нибудь знает, как мне помочь?

Ответы [ 2 ]

4 голосов
/ 03 мая 2011

Попробуйте отключить экранирование, вы можете сделать это прямо на элементе:

$element->setAttrib("escape", false);

Если вам нужны фильтры, вам нужно настроить кодировку, вот пример для упомянутого в комментарии:

$enc = array('quotestyle' => ENT_QUOTES, 'charset' => 'UTF-8');
$filter = new Zend_Filter_HtmlEntities($enc));
$element->addFilter($filter);

Фильтры, такие как StringToLower, реализуют метод с именем "setEncoding ();"

0 голосов
/ 03 декабря 2011

Если вам не нужно сохранять «санированные» объекты HTML, используйте вместо этого фильтр StripTags. StripTags удаляют теги HTML и PHP, в то время как HtmlEntities их кодируют.

Попробуйте это:

$filter = new Zend_Filter_StripTags();

вместо:

$filter = new Zend_Filter_HtmlEntities()
...