我有一个用户可能在帖子名称字段中输入内容的示例:
<h1><span>They're awesome people</span></h1>
现在因为这是一个帖子标题,我想在将其保存到数据库之前完全删除所有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,但这两者都会导致问题,因为它们会使they're
的引用脱离'
。我已经尝试在清理周围使用html_entity_decode
来清理它,但它仍然会发生。关于如何做到这一点的任何想法?
如果我这样做:
echo html_entity_decode('They're awesome people');
它工作正常,所以函数很好,将它与CakePHP中的sanitize类结合使用是一个问题。
由于
答案 0 :(得分:1)
为什么不使用
Sanitize::paranoid()
甚至是strip_tags
使Sanitize :: html工作
Sanitize::html($var, array('remove'=>true, 'quotes' => ENT_NOQUOTES));
它使用htmlentities internaly,默认标志设置为ENT_QUOTES。
答案 1 :(得分:0)