Sanitize :: html带有重音CakePHP2.0

时间:2012-04-16 16:37:43

标签: cakephp cakephp-2.0 sanitization diacritics sanitize

我用它来将我的数据保存到数据库中:

$this->request->data['Post']['body'] = utf8_decode($this->request->data['Post']['body']);

就像那样,我可以将一些“特殊”字符保存到我的数据库中,例如带有重音字符的字符: áéíóú没有任何问题。

然后,我试图保护我的应用程序免受HTML和SQL注入的攻击,我使用了像这样的Sanitization:

$this->request->data['Post']['body'] = Sanitize::html($this->request->data['Post']['body']);

所以现在我的文本存储在数据库中,如下所示:

á = á
é = é
í = í ...etc

我不想那样。此外,我在DB上的字段有一个最大的字符,这没有帮助。

我还尝试在使用encode = true,encode = false或encode ='utf8'的sanitize中使用options param,但似乎没有任何改变。

我该怎么办? 感谢。

更新1

我也试过在我的控制器上使用htmlentities函数,但是它将它插入我的数据库而不是á:

Ã

1 个答案:

答案 0 :(得分:2)

如果您使用Cake来保存数据(即使用save()而非query()),那么您可以防止SQL注入。它会自动转义值。

正如文档中所述,Sanitize::html()会将字符转换为HTML实体,例如>á等。除非您特别需要HTML实体,否则您可能不应该使用它。如果你的应用程序和表格上有正确的编码,Cake会很好地将你的口音存储在数据库中。