我用它来将我的数据保存到数据库中:
$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,但似乎没有任何改变。
我该怎么办? 感谢。
我也试过在我的控制器上使用htmlentities函数,但是它将它插入我的数据库而不是á:
Ã
答案 0 :(得分:2)
如果您使用Cake来保存数据(即使用save()
而非query()
),那么您可以防止SQL注入。它会自动转义值。
正如文档中所述,Sanitize::html()
会将字符转换为HTML实体,例如>
,á
等。除非您特别需要HTML实体,否则您可能不应该使用它。如果你的应用程序和表格上有正确的编码,Cake会很好地将你的口音存储在数据库中。