Symfony3-如何验证HTML标签

时间:2018-09-28 13:37:58

标签: symfony symfony3.x symfony-validator

使用Symfony验证器
如何防止某些HTML标记,例如 <input></input> <textarea><textarea>
在输入字段中输入并保存在数据库中?

2 个答案:

答案 0 :(得分:3)

您可以对实体中的文本/字符串属性使用正则表达式进行断言。例如,这应该阻止字符串中的所有HTML标签:

// src/Entity/Thing.php
namespace App\Entity;

use Symfony\Component\Validator\Constraints as Assert;

class Thing
{
    /**
     * @Assert\Regex(
     *     pattern="/<[a-z][\s\S]*>/i",
     *     match=false,
     *     message="Your text cannot contain HTML"
     * )
     */
    protected $text;
}

这应该检查输入和textarea元素:

// src/Entity/Thing.php
namespace App\Entity;

use Symfony\Component\Validator\Constraints as Assert;

class Thing
{
    /**
     * @Assert\Regex(
     *     pattern="/<(?=.*? .*?\/ ?>|textarea|input)[a-z]+.*?>|<([a-z]+).*?<\/\1>/i",
     *     match=false,
     *     message="Your text cannot contain certain HTML tags"
     * )
     */
    protected $text;
}

答案 1 :(得分:0)

您还可以在setter函数中使用strip_tags php函数来阻止html标签,也可以将一些允许的标签传递给此函数。

public function setText()
{
    $this->text = strip_tags($text);
    return $this;
}