Zend Form在populate上解码数据

时间:2012-02-23 15:10:56

标签: php mysql zend-framework encoding utf-8

我在解码来自数据库的数据时遇到了一些问题。

我的数据以utf8的形式存储在数据库中,对于这个例子,数据是'腐蚀&时间',存储为'腐蚀&时间'。现在我想用这些数据填充表单的一个字段,这个字段应用了一个htmlSpecialChars过滤器。

在浏览器中查看时,我看到: '腐蚀&时间'

如果我使用html_entity_decode,我会得到: '腐蚀$amp;时间'

如果我也从表单中删除过滤器,那么得到: '腐蚀&时间'

无论如何我可以填充表单而不从字段中删除过滤器吗?

2 个答案:

答案 0 :(得分:0)

在填充表单之前,您必须解码数据,过滤器不应该应用于来自表单的数据,直到它被发布,这将在调用getValues()时重新应用过滤器。

如果您知道使用htmlspecialchars对数据进行编码,请使用htmlspecialchars_decode对数据进行解码。

Description

string htmlspecialchars_decode ( string $string [, int $quote_style = ENT_COMPAT ] )

 This function is the opposite of htmlspecialchars(). It converts special HTML entities back to characters. 

The converted entities are: &, " (when ENT_NOQUOTES is not set), ' (when ENT_QUOTES is set), < and >. 

答案 1 :(得分:-1)

我认为一个好的解决方案是create a custom Zend_Filter。在自定义过滤器中,使用htmlspecialchars_decode()&之类的内容转换回&