在CakePHP中解码HTML实体时,从文章标题中删除HTML
我举了以下示例,说明用户可能会在字段中键入帖子名称:在CakePHP中解码HTML实体时,从文章标题中删除HTML,php,cakephp,Php,Cakephp,我举了以下示例,说明用户可能会在字段中键入帖子名称: 他们是很棒的人 现在,因为这是一篇文章的标题,我想在将其保存到数据库之前完全删除所有HTML。这是因为a)出于安全原因,b)如果我将其导出为JSON,我不想为第三方用户清除输出上的HTML 我在我的模型中尝试了以下方法: public function beforeSave() { if (isset($this->data[$this->alias]['title'])) {
他们是很棒的人
现在,因为这是一篇文章的标题,我想在将其保存到数据库之前完全删除所有HTML。这是因为a)出于安全原因,b)如果我将其导出为JSON,我不想为第三方用户清除输出上的HTML
我在我的模型中尝试了以下方法:
public function beforeSave() {
if (isset($this->data[$this->alias]['title']))
{
//$this->data[$this->alias]['title'] = Sanitize::clean($this->data[$this->alias]['title'], array('encode'=>true,'remove_html'=>true));
$this->data[$this->alias]['title'] = html_entity_decode(Sanitize::html($this->data[$this->alias]['title'], array('remove'=>true)));
}
return true;
}
正如您所看到的,我已经尝试了Sanitize类中的Clean和HTML来清除HTML,但两者都导致了一个问题,因为它们都从中逃出了引用,它们
使它看起来像'代码>。我曾尝试在消毒过程中使用html\u entity\u decode
来清理这个问题,但仍然发生了。有什么办法吗
如果我这样做:
echo html_entity_decode('They're awesome people');
它工作得很好,所以函数很好,在CakePHP中与sanitize类结合使用是个问题
谢谢您应该试试这个功能
编辑:
只使用PHP函数代替CakePHP库,您可以试试。为什么不使用
Sanitize::paranoid()
甚至
使Sanitize::html正常工作
Sanitize::html($var, array('remove'=>true, 'quotes' => ENT_NOQUOTES));
它在内部使用HTMLEntity,默认标志设置为ENT_QUOTES。Wellhtml_entity_decode
在PHP页面中执行此操作时效果良好,但在包装sanitize时不起作用,因此该函数很好,只是在clean周围的beforeSave中使用时效果不佳。这也不起作用,只是尝试一下。现在我用CakePHP进行了测试,你是对的。好吧,不是CakePHP解决方案,但是您可以只使用PHP函数吗?您可以使用删除HTML.strip_标记来完成此任务!但是为什么CakePHP版本会破坏你的HTML呢?谢谢你的解释;)