前显示) ” />
本文介绍使用 php 对纯文本歌词按换行符分割并动态插入递增行号的方法,确保每个 `
` 前精准显示对应序号,适用于无结构标签(如 `
`)的纯换行文本场景。
在 Web 开发中,若需为一段以
换行的纯文本歌词(例如嵌入在
中的连续文本)自动添加行号(如 1、2、3…),不能依赖 css —— 因为
是自闭合空元素,不支持 ::before 或 ::after 伪元素,也无法设置 counter-increment。此时必须借助服务端逻辑,在输出 html 前完成行号注入。
是自闭合空元素,不支持 ::before 或 ::after 伪元素,也无法设置 counter-increment。此时必须借助服务端逻辑,在输出 html 前完成行号注入。
推荐方案是使用 php 的 explode() 函数,以系统标准换行符 PHP_EOL 安全分割文本,并在每行末尾拼接行号与
:
gone And it went by, like dusk to dawn Isn't that the way? Everybody's got their dues in life to pay Yeah, I know nobody knows Where it comes and where it goes I know it's everybody's sin You got to lose to know how to win"; // 按换行符分割为数组(兼容 windows rn / Unix n / mac r) $lines = explode(PHP_EOL, $lyrics); // 遍历并输出:内容 + 行号 +
foreach ($lines as $index => $line) { // 行号从 1 开始($index 从 0 开始,故 +1) echo htmlspecialchars($line) . ' ' . ($index + 1) . '
' . PHP_EOL; } ?>
✅ 关键说明:
- 使用 PHP_EOL 而非硬编码 “n”,确保跨平台兼容性;
- htmlspecialchars() 防止歌词中特殊字符(如
- 行号严格置于
之前,且与文本用空格分隔,符合示例格式(如 …mirror 1
); - 若原始歌词已含
标签而非真实换行符,需先用 str_replace(‘
‘, “n”, $lyrics) 统一标准化。
⚠️ 注意事项:
- 此方法适用于服务端渲染场景;若需前端动态处理(如用户编辑后实时更新),应改用 javaScript(如 textContent.split(/rn|r|n/));
- 避免直接 echo $line . $index+1 . ‘
‘(缺少括号会导致运算优先级错误),务必写为 ($index + 1); - 若歌词来自数据库或用户输入,务必进行 xss 过滤(htmlspecialchars 是基础防护)。
通过该方式,你无需修改 HTML 结构或引入 js,即可干净、可靠地为任意
分隔的歌词实现「行号左对齐、紧邻换行前」的专业排版效果。