
PHP 读取纯文本文件时,默认会忽略换行符;需结合 nl2br() 将换行符 \n 转为 HTML <br> 标签,并使用 htmlspecialchars() 防止 XSS,才能在网页中准确呈现多行格式。
php 读取纯文本文件时,默认会忽略换行符;需结合 `nl2br()` 将换行符 `\n` 转为 html `
` 标签,并使用 `htmlspecialchars()` 防止 xss,才能在网页中准确呈现多行格式。
在 PHP 中从 .txt 文件读取内容并输出到网页时,一个常见误区是:纯文本中的换行符(如 \n 或 \r\n)在 HTML 中不会自动渲染为换行——因为浏览器会将连续空白符(包括换行、制表、多个空格)合并为单个空格。因此,即使你的 tekst.txt 文件内容如下:
Test Test Test Test
直接 echo $tekst 也会显示为 Test Test Test Test(一行紧凑显示)。
✅ 正确做法是三步处理:
- 安全读取内容:推荐使用 file_get_contents() 替代 fopen + fread,更简洁且自动处理编码与资源释放;
- 转义 HTML 特殊字符:用 htmlspecialchars($tekst) 防止用户输入的 <script> 等恶意代码被执行;
- 转换换行符为 HTML 换行标签:调用 nl2br(),它会将 \n、\r\n、\r 统一替换为 <br>(注意:nl2br() 不会重复转义已存在的 <br>,安全可靠)。
优化后的完整代码如下:
立即学习“PHP免费学习笔记(深入)”;
<?php
$tekst = file_get_contents("tekst.txt");
$tekst = htmlspecialchars($tekst, ENT_QUOTES, 'UTF-8');
$tekst = nl2br($tekst);
?>
<p style="
margin-top: 5%;
color: #04AA6D;
font-weight: bold;
text-align: center;
" id="tekst"><?php echo $tekst; ?></p>⚠️ 注意事项:
- 始终指定 htmlspecialchars() 的第三参数 'UTF-8',避免多字节字符截断导致的安全隐患;
- nl2br() 仅负责换行转换,不处理缩进或空行;若需保留空行效果,可额外用 str_replace("\n", "<br>\n", $tekst) 或 CSS white-space: pre-line(见下文备选方案);
- 更健壮的写法建议添加错误检查:
if (file_exists("tekst.txt") && is_readable("tekst.txt")) {
$tekst = file_get_contents("tekst.txt");
echo nl2br(htmlspecialchars($tekst, ENT_QUOTES, 'UTF-8'));
} else {
echo '<span style="color:red;">暂无内容</span>';
}? 进阶提示:若希望完全保留原始排版(含空格、缩进、空行),可改用 <pre> 标签配合 CSS:
<pre style="
margin-top: 5%;
color: #04AA6D;
font-weight: bold;
text-align: center;
white-space: pre-wrap;
font-family: inherit;
"><?php echo htmlspecialchars(file_get_contents("tekst.txt"), ENT_QUOTES, 'UTF-8'); ?></pre>white-space: pre-wrap 允许换行符生效,同时支持自动折行,兼顾可读性与安全性。
总结:nl2br() + htmlspecialchars() 是解决“文本换行不显示”问题最轻量、最标准的组合方案,适合初学者快速上手,也符合 Web 安全最佳实践。



















