PHP 清理 HTML 标签不止靠 strip_tags:clear_tags() 示例拆解

Mia
Mia
发布时间:2026-08-25 | 139人浏览过
原创

前言

很多 PHP 项目在把富文本转成纯文本时,都会先想到 `strip_tags()`,但真正落地后,往往还要继续处理 ` `、全角空格和换行残留。本文就用一个 `clear_tags()` 示例拆开看:它分别解决了哪些问题、适合放在哪类场景里,以及为什么“去标签”并不等于“得到可直接使用的纯文本”。

很多人在用 PHP 提取纯文本时,第一反应都是 `strip_tags()`,但实际结果往往并不干净:标签没了,空格、换行、` ` 之类的残留还在。下面这段 `clear_tags()` 的思路,就是在 `strip_tags()` 之后继续做一次文本清洗,适合需要把 HTML 内容整理成展示摘要、搜索索引或普通文本输出的场景。

为什么只用 strip_tags() 还不够

`strip_tags()` 的职责主要是移除 HTML 标签,本身并不负责把各种空白字符统一处理掉。因此,原始内容里如果混有 ` `、全角空格、换行符,或者标签删除后留下多余空白,最终得到的字符串看起来还是会“脏”。

也就是说,如果目标只是“去标签”,`strip_tags()` 已经够用;但如果目标是“把 HTML 转成尽量整洁的纯文本”,还需要继续补一层清理逻辑。

clear_tags() 函数代码

/**
 * 清除html标签
 */
function clear_tags($str)
{
    $str = strip_tags($str);
    //首先去掉头尾空格
    $str = trim($str);
    $str = preg_replace("/(s| | |xc2xa0)/", "", strip_tags($str));
    //接着去掉两个空格以上的
    $str = preg_replace('/s(?=s)/', '', $str);
    //最后将非空格替换为一个空格
    $str = preg_replace('/[nrt]/', ' ', $str);
    return $str;
}

// echo clear_tags('<p>Hello,World!!!</p>');
// 输出:
// Hello,World!!!

这段函数的核心思路很直接:先删标签,再裁掉首尾空白,然后继续处理特殊空格和换行,尽量把结果收敛成普通文本。

这段函数实际做了什么

1. 先用 strip_tags() 去掉 HTML 标签

第一步调用:

用四张编辑卡片概括这类函数最适合的使用场景
纯文本清洗更适合哪些用途这类函数更适合摘要、索引和预览文本,不只是简单过滤标签。
用纸张卡片和箭头展示 HTML 文本从去标签到去空白的清理流程
从 HTML 到纯文本的清理链路从 HTML 到纯文本,这个函数的重点不是只删标签,而是继续把空白字符整理干净。
$str = strip_tags($str);

它会把类似 `<p>`、`<div>` 这样的标签直接移除,只保留其中的文字内容。这一步解决的是结构层面的 HTML 标签问题。

2. 用 trim() 清掉头尾空白

$str = trim($str);

标签删除后,字符串首尾常会留下空格或换行。`trim()` 可以先把头尾这些多余内容裁掉,避免后续输出时两端不整洁。

3. 继续清理特殊空白字符

$str = preg_replace("/(s|&nbsp;| |xc2xa0)/", "", strip_tags($str));

这一句的目标,是继续处理普通空格样式、` `、全角空格以及一些特殊编码形式的空白字符。对很多网页抓取内容或富文本字段来说,问题往往不在标签本身,而在这些看不见却会影响显示的空白残留。

需要注意的是,原示例里正则写法保持了原样展示;从代码意图来看,它是在集中删除几类常见空白内容,而不是再次处理 HTML 结构。

4. 压缩重复空格

$str = preg_replace('/s(?=s)/', '', $str);

这一步的注释写的是“去掉两个空格以上的”,也就是希望把连续出现的空白进一步压缩,避免文本中间出现明显断层。对于从富文本编辑器、网页正文里提取出来的内容,这一步通常很有必要。

5. 把换行和制表符替换成普通空格

$str = preg_replace('/[nrt]/', ' ', $str);

函数最后把换行、回车、制表一类字符统一替换成普通空格。这样做的好处是,输出结果更适合做单行展示,比如文章摘要、列表描述、搜索结果预览等,不会因为原文里的换行而打乱页面布局。

适合用在哪些场景

如果你的目标是把 HTML 内容转成较干净的纯文本,这类函数比单独使用 `strip_tags()` 更实用,常见场景包括:

  • 生成文章摘要或列表简介;
  • 清洗富文本输入后再写入搜索索引;
  • 把网页内容转换成便于比较、导出或日志记录的普通文本。

示例里的调用结果也很直观:

// echo clear_tags('<p>Hello,World!!!</p>');
// 输出:
// Hello,World!!!

输入是带 `<p>` 标签的 HTML 字符串,输出则只保留文本 `Hello,World!!!`。

这段方法的价值在哪里

这段 `clear_tags()` 的价值,不是替代 PHP 原生 `strip_tags()`,而是在“去标签”之后继续补做空白清洗,让最终文本更接近可直接使用的结果。对于只需要简单过滤标签的场景,原生函数已经足够;但只要你关心输出是否整洁、是否适合展示,这种二次清理思路就很值得保留。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表