标签安全替换为换行符的完整方案 "> 标签安全替换为换行符的完整方案 " />
本文详解如何在 php 中精准将 html 的 `
`(含 `
`、`
` 等变体)转换为纯文本换行符 `\n`,既保留语义化分段效果,又避免 `strip_tags()` 误删内容或正则误匹配,确保 tts 朗读自然、android 渲染正确。
在 Web 与移动端协同场景中(如通过 JSON 向 Android App 传输富格式文本),常需保留
的视觉分隔功能,但又不希望语音合成(TTS)引擎将其读作“br”——此时,简单粗暴地调用 strip_tags() 会彻底抹除所有换行,导致全文连成一串;而错误使用 preg_replace('
', '\r\n', $txt) 则因未转义正则元字符、缺少分隔符和修饰符,不仅无法匹配闭合标签(如
),还会意外替换文本中任意位置的子字符串 "br"(例如 "break" → "nreak"),造成严重语义污染。
正确的做法是:先精准将各类
标签统一转换为换行符,再清理其余 HTML 标签。推荐使用以下健壮函数:
/** * 将 HTML 中的
、
、
等标签安全替换为换行符 \n * 支持大小写不敏感及空格/斜杠变体 * * @param string $string 待处理的 HTML 字符串 * @return string 替换后的纯文本(保留换行) */ function br2nl(string $string): string { // 使用 PCRE 正则:匹配
及其常见变体(忽略大小写、允许空格和可选斜杠) return preg_replace('/
/i', "\n", $string); } // 使用示例 $mytxt = "Lorem ipsum
\nAnother lorem ipsum
\nThird section...
"; $withNewlines = br2nl($mytxt); // → "Lorem ipsum\n\nAnother lorem ipsum\nThird section...\n" $finalText = strip_tags($withNewlines); // → "Lorem ipsum\n\nAnother lorem ipsum\nThird section..."
✅ 关键要点说明:
、)才被安全剥离;
最终输出的 $finalText 即为含纯净换行符的文本:TTS 引擎按自然段落停顿朗读,Android 端亦可直接用 TextView.setText() 显示正确分段——一举两得,无需额外解析逻辑。