
本文介绍如何在 php 中安全移除 html 标签,并进一步压缩多余空白(如换行、制表符、连续空格),避免 `strip_tags()` 后 textarea 中出现异常缩进或空行。
在使用 strip_tags() 处理从 wordPress rest api 或其他富文本源(如 content.rendered)获取的 html 内容时,虽然标签被成功清除,但原始 HTML 中的换行符(n)、制表符(t)及多空格仍会保留在纯文本中。这些不可见字符在
推荐采用两步清洗策略:
- 先用 strip_tags() 移除所有 HTML 标签;
- 再用 preg_replace() 统一规范化空白字符——将多个连续空白、换行、制表符替换为单个普通空格,并可选地 trim() 去除首尾空白。
以下是优化后的完整示例代码:
php // 假设 $data 已通过 curl 获取并解码为关联数组 $text = ''; $title = ''; foreach ($data as $item) { if (isset($item['id']) && $item['id'] == $_GET['id']) { $text = $item['content']['rendered'] ?? ''; $title = $item['title']['rendered'] ?? ''; break; } } // 第一步:剥离 HTML 标签 $text = strip_tags($text); $title = strip_tags($title); // 第二步:清理冗余空白 —— 合并多个空格、换行、制表符为单个空格 $text = preg_replace('/s+/', ' ', $text); // 更简洁写法,等效于 ['/[tnrs]{2,}/', '/[tnr]/'] $text = trim($text); // 去除首尾空格/换行 // 可选:若需保留段落分隔,可用 'n' 替代 ' ',但需配合 textarea 的 white-space 处理 // $text = preg_replace('/s*/i', "nn", $text); // $text = strip_tags($text); ?>
⚠️ 重要注意事项:
立即学习“PHP免费学习笔记(深入)”;
- 永远对输出到 HTML 的变量使用 htmlspecialchars()(如上例所示),防止 xss 漏洞——strip_tags() 不等于安全转义;
- preg_replace(‘/s+/’, ‘ ‘, $str) 比分别匹配 t、n 更健壮,能同时处理回车(r)、全角空格等常见空白;
- 若原文本需保留逻辑段落结构(如
分隔),建议在 strip_tags() 前先将块级标签(如
、
)替换为换行符,再统一清理; - 避免在 echo 前直接拼接未过滤的 $text,尤其当内容来自外部 API 时。
通过以上处理,textarea 中显示的文本将紧凑、整洁、符合用户阅读预期,同时兼顾安全性与可维护性。