如何用PHP Tidy让A、SPAN等内联元素像块元素一样缩进?
如何让PHP Tidy给内联元素添加块元素风格的空格分隔
嘿,这个问题我之前折腾过,PHP Tidy默认对内联元素(比如<a>、<span>)的处理确实和块元素不一样,但调整几个配置参数就能轻松实现你要的效果!
你的需求是把紧凑的内联元素结构:
<a href="#test"><span>Text</span></a>
转换成带有空格分隔的格式:
<a href="#test"> <span> Text </span> </a>
关键在于利用Tidy的add-space配置项,结合缩进相关参数,具体实现代码如下:
$input = '<a href="#test"><span>Text</span></a>'; // 配置Tidy参数 $tidyConfig = [ 'indent' => true, // 开启缩进功能 'indent-spaces' => 1, // 设置缩进的空格数(匹配你的期望) 'add-space' => 'a, span', // 指定要添加空格的内联元素 'wrap' => 0, // 禁止自动换行,保持内容在一行 'preserve-entities' => true, // 保留原始HTML实体 'show-body-only' => true, // 仅输出body内容(因为输入是片段) 'clean' => false, // 不清理额外内容 'markup' => true // 确保输出HTML格式 ]; // 初始化并处理 $tidy = new tidy(); $tidy->parseString($input, $tidyConfig, 'utf8'); $tidy->cleanRepair(); // 输出结果(用htmlspecialchars转义方便查看) echo htmlspecialchars($tidy);
关键配置项解释:
add-space: a, span:这是核心!告诉Tidy在指定的内联元素的开始标签后、结束标签前添加空格,让内容和标签之间有分隔。indent: true+indent-spaces: 1:开启缩进并设置空格数,确保元素内部的空格符合你的要求。wrap: 0:避免Tidy自动将内容换行,保持你想要的单行结构。show-body-only: true:因为你的输入是HTML片段而非完整文档,这个参数会让Tidy只输出处理后的内容,不会自动补全<html>、<body>等标签。
测试这段代码后,就能得到你期望的输出格式啦。
内容的提问来源于stack exchange,提问作者Sergey L
相关产品推荐
相关产品推荐

