在解码CakePHP中的HTML实体时从帖子标题中删除HTML

时间:2012-03-31 11:04:04

标签: php cakephp

我有一个用户可能在帖子名称字段中输入内容的示例:

<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的引用脱离&#039;。我已经尝试在清理周围使用html_entity_decode来清理它,但它仍然会发生。关于如何做到这一点的任何想法?

如果我这样做:

echo html_entity_decode('They&#039;re awesome people');

它工作正常,所以函数很好,将它与CakePHP中的sanitize类结合使用是一个问题。

由于

2 个答案:

答案 0 :(得分:1)

为什么不使用

 Sanitize::paranoid() 

Manual

甚至是strip_tags

使Sanitize :: html工作

Sanitize::html($var, array('remove'=>true, 'quotes' => ENT_NOQUOTES));

它使用htmlentities internaly,默认标志设置为ENT_QUOTES。

答案 1 :(得分:0)

您应该尝试htmlspecialchars_decode()功能。

修改

仅使用PHP函数而不是CakePHP库,您可以尝试strip_tags()