HTML实体转换非常奇怪

时间:2012-01-16 22:15:44

标签: php html string model-view-controller smarty

我正在开发一个涉及修改现有代码的项目,并且正在进行的行为对我来说完全没有意义。我希望有人看到类似的东西,因此可以提供一些关于问题源自何处的见解。

我能给出的最好的简短例子如下:

A user enters "This & that" into a textarea on an input form and when saved 
once it becomes: "This & that", when it is saved again it becomes:  
"This & that", save it again and you get: 
"This & that".

显然,每次保存问题都会继续恶化。实际存储在DB(MySQL)中的数据是上面显示的文本,前端没有用于转换字符/实体的过滤器。显然,如果它们被正确存储,那么打一个htmlspecialchars_decode()的调用就很容易了,但这还不是一个选择......

我是否有一些前端检查可以查看符号被损坏的位置?我正在查看处理数据的控制器,并且它正在使用rest事件来执行此操作,但是我在哪里看不到任何甚至会尝试转换HTML实体的内容,更不用说会错误地转换它们的内容。

正如我在介绍中所说,我希望有人可能已经看过这个,并且可以帮助确定它可能发生的位置。这是使用PHP(Protean,MVC框架),Propel,patforms / smarty在后端构建,MySQL(通过PDO)在后端,jQuery用于大多数JS相关的东西。

2 个答案:

答案 0 :(得分:0)

您的数据过多htmlentities()次。这是一个常见的,noobish错误,通常涉及在发送到数据库之前对数据进行urlencoding,并在检索时再次对其进行编码。一旦(在输出上)就足够了。你永远不应该编码它。

答案 1 :(得分:0)

我不想在这里回答我自己的问题,但它实际上是埋在框架中的一个set方法的双重产品,导致了双重编码。我稍微更改了数据流,现在所有内容都正确存储,我现在可以在输出周围抛出一个htmlspecialchars_decode(),生活很美好。

感谢大家的建议!

- N