PHP中HTML标签过滤技巧


在PHP中,过滤HTML标签是一个常见的需求,用于防止跨站脚本攻击(XSS)等安全问题。PHP提供了多种方式来过滤或转义HTML标签。以下是几种常用的方法:

### 1. 使用`htmlspecialchars()`函数

这个函数会将特定的字符转换为HTML实体。它是防止XSS攻击的一个简单有效的方法。虽然它不会直接移除HTML标签,但会将标签中的特殊字符转义,使得浏览器不会将其作为HTML代码执行。


$userInput = "<script>alert('XSS');</script>";
$safeOutput = htmlspecialchars($userInput, ENT_QUOTES, 'UTF-8');
echo $safeOutput; // 输出: <script>alert('XSS');</script>

### 2. 使用`strip_tags()`函数

如果你需要完全移除HTML标签,可以使用`strip_tags()`函数。这个函数会剥离字符串中的HTML和PHP标签。


$userInput = "<b>Hello</b> <script>alert('XSS');</script>";
$safeOutput = strip_tags($userInput);
echo $safeOutput; // 输出: Hello

### 3. 使用`HTMLPurifier`库

对于更复杂的HTML过滤需求,如允许某些特定的HTML标签,同时清理或转义其他标签,`HTMLPurifier`库是一个强大的选择。它不是PHP内置的,但可以通过Composer安装。


composer require ezyang/htmlpurifier

然后,在你的PHP代码中使用它:


require_once '/path/to/htmlpurifier/library/HTMLPurifier.auto.php';

$config = HTMLPurifier_Config::createDefault();
$purifier = new HTMLPurifier($config);

$userInput = "<script>alert('XSS');</script><p>Hello World</p>";
$clean_html = $purifier->purify($userInput);

echo $clean_html; // 输出: <p>Hello World</p>

注意:使用`HTMLPurifier`时,请确保已正确安装并引入其库文件。

### 总结

根据你的具体需求,你可以选择`htmlspecialchars()`来转义HTML特殊字符,`strip_tags()`来移除HTML标签,或者使用`HTMLPurifier`库来进行更复杂的HTML清理和过滤。