PHP - HTML Purifier - hello w<o>rld/world tutorial striptags

2022-08-30 23:47:01

我只是在考虑使用HTML Purifier来确保用户输入的字符串(代表一个人的名字)被清理。

我不想允许任何html标签,脚本,标记等 - 我只想要字母,数字和正常的标点符号字符。

HTML Purifier可用的选项数量之多令人生畏,据我所知,文档似乎没有开头/中间或结尾

请参见: http://htmlpurifier.org/docs

有没有一个简单的Hello world在线HTML净化器教程,演示如何清理字符串,从中删除所有不好的东西。

我也在考虑只使用条形标签:

或PHP在内置数据清理


答案 1

我一直在使用HTMLPurifier来清理富文本编辑器的输出,最终得到:

include_once('htmlpurifier/library/HTMLPurifier.auto.php');

$config = HTMLPurifier_Config::createDefault();
$config->set('Core', 'Encoding', 'UTF-8');
$config->set('HTML', 'Doctype', 'HTML 4.01 Transitional');

if (defined('PURIFIER_CACHE')) {
    $config->set('Cache', 'SerializerPath', PURIFIER_CACHE);
} else {
    # Disable the cache entirely
    $config->set('Cache', 'DefinitionImpl', null);
}

# Help out the Purifier a bit, until it develops this functionality
while (($cleaner = preg_replace('!<(em|strong)>(\s*)</\1>!', '$2', $input)) != $input) {
    $input = $cleaner;
}

$filter = new HTMLPurifier($config);
$output = $filter->purify($input);

主要景点:

  1. 包括自动加载机。
  2. 创建 as 的实例。HTMLPurifier_Config$config
  3. 根据需要使用 设置配置设置。$config->set()
  4. 创建传递给它的 实例。HTMLPurifier$config
  5. 用于您的输入。$filter->purify()

但是,对于不需要在输出中允许任何HTML的东西来说,这完全是大材小用。


答案 2

您应该根据内容进行输入验证 - 例如,宁愿使用一些正则表达式作为名称

'/([A-Z][a-z]+[ ]?)+/' //ascii only, but not problematic to extend

此验证应能很好地完成工作。然后在页面上打印输出时,使用首选的htmlspecialchars转义输出。


推荐