PHP常用函数:过滤HTML字符串
封面图
•
2025-10-23
•
PHP
233
0
0
0
在 PHP 中,如果你需要过滤 HTML 字符串(例如防止 XSS 攻击、清理用户输入等),可以使用以下一些常用的函数和方法: --- ## ✅ 1. `htmlspecialchars()` **功能**:将特殊字符转换为 HTML 实体(如 `<` 转换为 `<`)。 ```php $string = "<script>alert('XSS');</script>"; $cleaned = htmlspecialchars($string, ENT_QUOTES, 'UTF-8'); echo $cleaned; // 输出: <script>alert('XSS');</script> ``` **参数说明**: - `$string`:要过滤的字符串。 - `ENT_QUOTES`:同时转义双引号和单引号。 - `'UTF-8'`:编码格式。 --- ## ✅ 2. `htmlentities()` **功能**:与 `htmlspecialchars()` 类似,但会转换所有 HTML 实体(包括非 ASCII 字符)。 ```php $string = "Hello & <b>World</b>"; $cleaned = htmlentities($string, ENT_QUOTES, 'UTF-8'); echo $cleaned; // 输出: Hello & <b>World</b> ``` --- ## ✅ 3. `strip_tags()` **功能**:移除 HTML 和 PHP 标签。 ```php $string = "<p>Hello <b>World</b></p>"; $cleaned = strip_tags($string); echo $cleaned; // 输出: Hello World ``` **可选参数**:可以指定允许保留的标签。 ```php $cleaned = strip_tags($string, '<p><strong>'); // 只保留 <p> 和 <strong> 标签 ``` --- ## ✅ 4. `filter_var()` + `FILTER_SANITIZE_STRING` **功能**:使用 PHP 的过滤器来清理字符串,适合用于表单数据。 ```php $string = "<script>alert('XSS');</script>"; $cleaned = filter_var($string, FILTER_SANITIZE_STRING); echo $cleaned; // 输出: alert('XSS'); ``` --- ## ✅ 5. 使用 `DOMDocument` 过滤 HTML(更安全) 如果需要保留部分 HTML 标签,可以使用 `DOMDocument` 来解析并删除不安全的内容。 ```php function sanitize_html($html) { $doc = new DOMDocument(); @$doc->loadHTML(mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8')); $xpath = new DOMXPath($doc); // 移除 script 和 style 标签 foreach ($xpath->query('//script | //style') as $node) { $node->parentNode->removeChild($node); } return $doc->saveHTML(); } $html = "<p>Hello <b>World</b> <script>alert('XSS');</script></p>"; echo sanitize_html($html); // 输出: <p>Hello <b>World</b> </p> ``` --- ## 📌 总结推荐用法 | 场景 | 推荐函数 | |------|----------| | 单纯显示用户输入内容 | `htmlspecialchars()` | | 清理富文本输入(保留部分标签) | `strip_tags()` 或 `DOMDocument` | | 表单提交数据清洗 | `filter_var($string, FILTER_SANITIZE_STRING)` | | 安全地展示 HTML 内容 | `htmlspecialchars()` 或 `htmlentities()` | --- 如需更高级的 HTML 过滤(如白名单机制),建议使用第三方库如 [HTML Purifier](http://htmlpurifier.org/)。
上一篇:
PHP使用模板制作静态页面
下一篇:
PHP常用的正则表达式
标题录入,一次不能超过6条
返回顶部
留言
留言
评论