PHP strip_tags() 函数详解

目录

[PHP strip_tags() 函数详解](#PHP strip_tags() 函数详解)

函数作用

基本语法

示例说明

示例1:基本用法

示例2:允许特定标签

示例3:处理用户输入(安全防护)

示例4:保留标签属性

示例5:处理多行HTML

注意事项

替代方案


PHP strip_tags() 函数详解

strip_tags() 是 PHP 中的一个内置函数,用于从字符串中去除 HTML 和 PHP 标签。

函数作用

strip_tags() 的主要作用是:

  1. 过滤字符串中的 HTML 和 PHP 标记

  2. 防止 XSS(跨站脚本)攻击

  3. 在需要纯文本输出的场景中使用

基本语法

复制代码
string strip_tags ( string $str [, string $allowable_tags ] )
  • $str:输入的字符串

  • $allowable_tags:可选参数,指定允许保留的标签

示例说明

示例1:基本用法

php 复制代码
$text = '<p>这是一个段落。</p><!-- 注释 --> <a href="#fragment">链接文本</a>';
$clean_text = strip_tags($text);
echo $clean_text;

输出:

php 复制代码
这是一个段落。 链接文本

示例2:允许特定标签

php 复制代码
$text = '<p>这是一个段落。</p> <b>加粗文本</b> <a href="#fragment">链接</a>';
$clean_text = strip_tags($text, '<p><a>');
echo $clean_text;

输出:

php 复制代码
<p>这是一个段落。</p> 加粗文本 <a href="#fragment">链接</a>

注意:<b>标签被去除了,但<p><a>标签保留了下来。

示例3:处理用户输入(安全防护)

php 复制代码
// 假设这是用户提交的内容
$user_input = '<script>alert("XSS攻击!");</script> <p>正常内容</p>';
$safe_input = strip_tags($user_input);
echo $safe_input;

输出:

php 复制代码
正常内容

示例4:保留标签属性

php 复制代码
$text = '<p style="color:red;">红色文字</p> <img src="image.jpg" alt="图片">';
$clean_text = strip_tags($text, '<p><img>');
echo $clean_text;

输出:

php 复制代码
<p style="color:red;">红色文字</p> <img src="image.jpg" alt="图片">

注意:保留的标签其属性也会被保留。

示例5:处理多行HTML

php 复制代码
$html = <<<HTML
<!DOCTYPE html>
<html>
<head>
    <title>示例页面</title>
</head>
<body>
    <h1>标题</h1>
    <p>正文内容</p>
    <ul>
        <li>项目1</li>
        <li>项目2</li>
    </ul>
</body>
</html>
HTML;
​
$plain_text = strip_tags($html);
echo $plain_text;

输出:

php 复制代码
示例页面 标题 正文内容 项目1 项目2

注意事项

  1. 这个函数不会验证 HTML 的合法性,只是简单地去除标签

  2. 自 PHP 5.3.4 起,自闭合的 XHTML 标签会被忽略

  3. 对于复杂的 HTML 处理,可能需要结合其他函数或使用专门的 HTML 解析器

  4. 该函数不会去除 HTML 实体(如 &amp;&lt; 等)

替代方案

对于更复杂的 HTML 处理,可以考虑:

  • htmlspecialchars() - 将特殊字符转换为 HTML 实体

  • DOMDocument 类 - 提供更强大的 HTML 解析和操作能力

  • 专门的 HTML 净化库如 HTML Purifier

strip_tags() 是一个简单快速的解决方案,适合大多数基本的标签去除需求。

相关推荐
码云数智-大飞15 小时前
PHP 接口开发规范:统一返回格式、异常处理与参数校验
开发语言·php
dadaobusi15 小时前
仿真边界处理
开发语言·php
Demons_kirit17 小时前
实验:文件路径遍历,简单情况(Lab: File path traversal, simple case)
网络安全
微学AI18 小时前
内网穿透的应用-把飞牛NAS变成家庭录像中心:EasyNVR部署与远程回放实战
开发语言·php
峥嵘life18 小时前
Android WiFi连接过程 wpa_supplicant 日志分析
android·开发语言·php
weixin_BYSJ198718 小时前
「课设设计」springboot校园超市助购系统26449 (附源码)
java·javascript·spring boot·python·django·flask·php
sbjdhjd18 小时前
SQL 注入零基础详解:原理、手工注入流程与 Sqli-Labs 靶场实战1~5关和第9关思路
数据库·sql·计算机网络·web安全·网络安全·网络攻击模型·安全架构
xuefeiniao19 小时前
CentOS + 宝塔服务器偶发 SSH、面板、网站全部无法访问排查记录(PHP-FPM 内存耗尽案例)
服务器·centos·ssh·php
学习溢出20 小时前
【网络安全】Living off the Land 攻击 | 蓝队防守
安全·web安全·网络安全
学逆向的20 小时前
汇编——寻址方式
开发语言·汇编·网络安全