
本文介绍如何在 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); // 更简洁写法,等效于 ['/[\t\n\r\s]{2,}/', '/[\t\n\r]/']
$text = trim($text); // 去除首尾空格/换行
// 可选:若需保留段落分隔,可用 '\n' 替代 ' ',但需配合 textarea 的 white-space 处理
// $text = preg_replace('/<\/p>\s*<p>/i', "\n\n", $text);
// $text = strip_tags($text);
?><div class="form-outline">
<textarea class="form-control" id="textAreaExample1" rows="25" style="width:50%;">
<?php echo htmlspecialchars($text, ENT_QUOTES, 'UTF-8'); ?>
</textarea>
</div>⚠️ 重要注意事项:
立即学习“PHP免费学习笔记(深入)”;
- 永远对输出到 HTML 的变量使用 htmlspecialchars()(如上例所示),防止 XSS 漏洞——strip_tags() 不等于安全转义;
- preg_replace('/\s+/', ' ', $str) 比分别匹配 \t、\n 更健壮,能同时处理回车(\r)、全角空格等常见空白;
- 若原文本需保留逻辑段落结构(如
分隔),建议在 strip_tags() 前先将块级标签(如
、
)替换为换行符,再统一清理; - 避免在 echo 前直接拼接未过滤的 $text,尤其当内容来自外部 API 时。
通过以上处理,textarea 中显示的文本将紧凑、整洁、符合用户阅读预期,同时兼顾安全性与可维护性。











