本文目录导读:

- strip_tags() - 最基础的方法
- HTML Purifier - 推荐的安全方案
- filter_var() 带 FILTER_SANITIZE_STRING
- 正则表达式过滤
- DOMDocument 方式
- Laravel 框架方案
- 推荐使用方案
- 不同场景的选择建议
- 重要提示
在PHP项目中过滤清除HTML标签,主要有以下几种常用方法:
strip_tags() - 最基础的方法
$html = '<p>Hello <b>World</b></p>'; $clean = strip_tags($html); echo $clean; // 输出:Hello World // 保留特定标签 $clean = strip_tags($html, '<p><b>'); echo $clean; // 输出:<p>Hello <b>World</b></p>
优点:简单直接
缺点:安全性不够,无法处理恶意属性
HTML Purifier - 推荐的安全方案
require_once '/path/to/HTMLPurifier.auto.php';
$config = HTMLPurifier_Config::createDefault();
$config->set('HTML.Allowed', 'p,b,a[href],img[src]');
$purifier = new HTMLPurifier($config);
$clean = $purifier->purify($html);
优点:安全性最高,可配置性强
缺点:需要安装库,性能开销较大
filter_var() 带 FILTER_SANITIZE_STRING
$html = '<script>alert("xss")</script>';
$clean = filter_var($html, FILTER_SANITIZE_STRING);
注意:PHP 8.1+ 已弃用此过滤器,不推荐使用
正则表达式过滤
function removeHtmlTags($html) {
// 移除所有HTML标签
return preg_replace('/<[^>]*>/', '', $html);
}
// 更严格的方式
function sanitizeHtml($input) {
return preg_replace('/(<[^>]+>|<[^>]+$)/', '', $input);
}
优点:灵活
缺点:容易出错,可能被绕过
DOMDocument 方式
function stripHtmlTags($html) {
$doc = new DOMDocument();
@$doc->loadHTML(mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8'));
$text = '';
foreach ($doc->getElementsByTagName('body')->item(0)->childNodes as $node) {
$text .= $doc->saveHTML($node);
}
return strip_tags($text);
}
Laravel 框架方案
如果使用 Laravel,可以直接使用辅助函数:
// 使用 e() 函数 $clean = e($html); // 或者使用 htmlspecialchars $clean = htmlspecialchars($html, ENT_QUOTES, 'UTF-8');
推荐使用方案
/**
* 安全过滤HTML标签
*
* @param string $html 需要过滤的内容
* @param bool $removeSpaces 是否移除多余空格
* @return string
*/
function safeStripTags($html, $removeSpaces = false) {
// 1. 先转义特殊字符
$html = htmlspecialchars($html, ENT_QUOTES, 'UTF-8');
// 2. 移除HTML标签
$html = strip_tags($html);
// 3. 可选:移除多余空格
if ($removeSpaces) {
$html = preg_replace('/\s+/', ' ', $html);
$html = trim($html);
}
return $html;
}
不同场景的选择建议
| 场景 | 推荐方案 | 原因 |
|---|---|---|
| 简单的文本清洗 | strip_tags() |
速度快,够用 |
| 用户输入内容 | HTML Purifier | 安全性最高 |
| 防止XSS攻击 | htmlspecialchars() + strip_tags() |
双重防护 |
| 允许部分标签 | HTML Purifier | 精细控制 |
| 高并发场景 | 自定义正则+黑名单 | 性能优先 |
重要提示
- 永远不要相信用户输入,即使过滤也要多层级防护
- 根据使用场景选择合适的过滤级别
- 输出时使用
htmlspecialchars()转义 - 如果需要允许某些HTML标签,优先使用白名单方式
选择哪种方案取决于你的具体需求:安全性要求、性能要求、是否需要保留部分标签等。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播