
本文介绍如何在 php 中安全移除 html 标签,并有效压缩多余空白(如换行、制表符和连续空格),避免 strip_tags() 后 textarea 显示大量冗余空行或缩进。
在 Web 开发中,常需将富文本内容(如 WordPress REST API 返回的 content.rendered 字段)展示于 <textarea> 中供用户编辑。但直接使用 strip_tags() 仅删除标签,却保留原始 HTML 中的换行符(\n)、制表符(\t)及多空格结构,导致 textarea 内容出现大量不规则空行与缩进,影响可读性与用户体验。
正确的处理流程应分为两步:先剥离标签,再规范化空白。PHP 原生函数 strip_tags() 是剥离 HTML/XML 标签的安全首选(相比正则匹配更可靠),但它不处理空白字符。因此需配合 preg_replace() 进行二次清理:
<?php
// 示例:从 JSON 数据中提取并净化内容
foreach ($data as $item) {
if ($yazi_id["id"] == $_GET["id"]) {
$text = $item["content"]["rendered"];
$title = $item["title"]["rendered"];
break;
}
}
// 第一步:剥离所有 HTML 标签
$text = strip_tags($text);
$title = strip_tags($title);
// 第二步:统一空白 —— 将连续空白符(含 \n, \t, 多个空格)压缩为单个空格
$cleanText = preg_replace(['/[\r\n\t]+/', '/\s{2,}/'], ' ', $text);
// 可选:进一步 trim 首尾空白,确保 textarea 内容整洁
$cleanText = trim($cleanText);
?>在 HTML 输出中,直接回显 $cleanText 即可获得紧凑、易读的纯文本:
<div class="form-outline">
<textarea class="form-control" id="textAreaExample1" rows="25" style="width:50%;">
<?php echo htmlspecialchars($cleanText, ENT_QUOTES, 'UTF-8'); ?>
</textarea>
</div>⚠️ 重要注意事项:
立即学习“PHP免费学习笔记(深入)”;
- 始终对输出到 HTML 的变量使用 htmlspecialchars()(如上例),防止 XSS 漏洞——strip_tags() 不等同于输出转义;
- 若需保留段落换行(如将 <p> 转为 \n),应改用 DOMDocument 解析 + 自定义逻辑,而非简单正则;
- preg_replace 中的正则 /[\r\n\t]+/ 匹配所有回车、换行、制表符,/\s{2,}/ 匹配两个及以上任意空白字符,二者组合可覆盖绝大多数冗余空白场景。
通过“剥离→压缩→转义”三步法,即可在保障安全性的同时,显著提升 textarea 内容的整洁度与可用性。











