标签添加递增行号
" />
本文教你正确实现歌词行号自动计数:通过按 `
` 分割字符串并插入序号,而非错误地使用 `php_eol`,从而精准为每行歌词生成递增编号。
在处理 HTML 格式歌词时,常见的需求是为每段换行(即每个
)添加行号,例如用于卡拉 OK 显示或排版标注。但原代码中使用 explode(PHP_EOL, $lyrics) 是根本性错误——因为 $lyrics 是一个单行 HTML 字符串(所有内容在 PHP 中实际存储为一行),其中的
并非系统换行符,PHP_EOL 在此完全不匹配,导致 explode() 返回仅含一个元素的数组,循环失去意义。
✅ 正确做法是:以
为分隔符进行分割,并在重组时注入行号。注意需保留原始
结构(或统一替换为带编号的版本),同时避免破坏 HTML 语义。以下是推荐实现:
<?php
$lyrics = "<p>Every time when I look in the mirror <br />All these lines on my face getting clearer <br /> The past is gone <br /> And it went by, like dusk to dawn <br /> Isn't that the way? <br /> Everybody's got their dues in life to pay <br /> Yeah, I know nobody knows <br /> Where it comes and where it goes <br /> I know it's everybody's sin <br /> You got to lose to know how to win <br /></p>";
// 1. 移除首尾 <p> 标签(可选,便于干净处理)
$lyrics = trim(strip_tags($lyrics, '<br>')); // 仅保留 <br>,去除其他标签
$lyrics = str_replace('<br />', '<br>', $lyrics); // 统一为 <br>(兼容不同写法)
// 2. 按 <br> 分割(注意:需转义正则或使用 str_replace 预处理)
$lines = explode('<br>', $lyrics);
// 3. 过滤空行并生成带序号的行
$output = [];
foreach ($lines as $index => $line) {
$line = trim($line);
if ($line !== '') {
$output[] = sprintf('%d. %s', $index + 1, htmlspecialchars($line));
}
}
// 4. 输出(用 <br> 连接,保持换行)
echo '<p>' . implode('<br>', $output) . '</p><div class="aritcle_card flexRow">
<div class="artcardd flexRow">
<a class="aritcle_card_img" href="/xiazai/skill11445" title="使用华数设计生成高保真HTML原型、演示文稿、动画和设计评审"><img
src="https://img.php.cn/upload/skill/001/246/273/6adaf20e695c2374.jpg" alt="使用华数设计生成高保真HTML原型、演示文稿、动画和设计评审" ></a>
<div class="aritcle_card_info flexColumn">
<a href="/xiazai/skill11445" title="使用华数设计生成高保真HTML原型、演示文稿、动画和设计评审">使用华数设计生成高保真HTML原型、演示文稿、动画和设计评审</a>
<p>使用经过文档化的设计技能,从真实的品牌或项目背景中生成HTML原生原型、幻灯片、动态演示、可视化图表和评审流程。</p>
</div>
<a href="/xiazai/skill11445" title="使用华数设计生成高保真HTML原型、演示文稿、动画和设计评审" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a>
</div>
</div>';
?>? 关键注意事项:
- ❌ 不要依赖 PHP_EOL 处理 HTML 内部换行标记;HTML 的换行由
等标签控制,与文本文件换行符无关; - ✅ 使用 explode('
', $lyrics) 前建议先标准化
变体(如
,
,
),可借助 preg_replace() 实现大小写/斜杠容错; - ⚠️ 直接拼接用户输入内容存在 XSS 风险,务必使用 htmlspecialchars() 转义歌词文本;
- ? 若需保留原始
结构和样式,可在最终输出前包裹回
,或使用 DOMDocument 进行更健壮的 HTML 解析(适用于复杂场景)。
该方案简洁、可靠,适用于大多数歌词行号标注需求,确保每行
后的内容获得准确、连续的序号。

















