我已尝试nl2br()
以及评论here中列出的所有方法。我遇到的问题是即使他们插入了<br/>
,\n
仍然会保留在文本中。
这就是我最初做的事情:
<?php
$stmt = $db->prepare(...)
$stmt->execute();
while ($row = $stmt->fetch()) {
$tldr_clean = nl2br($row['tldr']);
$body_clean = nl2br($row['body']);
?>
<section>
<h2 class="tldr"><?= $tldr_clean ?> <?= $row['score']?>/10</h2>
<p class="body"><?= $body_clean ?></p>
<p class="reviewer">Written by <?= $row['name'] ?></p>
</section>
<?php
} ?>
假设$row['body']
为"Hello\nGoodbye"
,则html中的输出为:
Hello\n
Goodbye
我尝试使用方法nl2br()
直接使用存储在数据库中的字符串,它可以正常工作。所以我猜测问题是用变量调用方法?我该如何解决?
编辑:
String作为NVARCHAR2存储在SQLite表中。
存储在数据库中的字符串:
“Fusce vitae purus tristique,efficitur dolor et,tristique ante.Aliquam sapien nisl,sagittis id justo eget,placerat ultrices nisl.in tempus sollicitudin mauris ut feugiat.Pellentesque imperdiet risus at ex dictum,sed tempus est pulvinar.Nunc nec leo fringilla diam sodales euismod sed sed odio。\ n Cras mollis,quam at iaculis semper,justo dui maximus tellus,quis dictum urna velit sit amet justo。 Curabitur consectetur fringilla arcu,坐在amet ultrices est dignissim eget。 Etiam non dapibus justo,et semper quam。 Suspendisse tristique augue坐在amet gravida euismod。 Ut tempus metus quis nisl sagittis volutpat。 Nam rhoncus diam luctus dictum tristique。“
答案 0 :(得分:4)
如果您回显数据并且在输出中看到实际的\n
,那么您所拥有的不是换行符,而是文字\
后跟{{ 1}}角色。通常这些在代码中被转换为换行符,但如果在变量中的字符串中(例如从数据库中提取时),则不是。然后,您应该在n
上执行str_replace(注意单引号,以便它不会转换为换行符)。
这可能是你在插入时使用addslashes(将'\n'
换行符转换为\n
)或者由于某些任意安全原因由数据库自动完成而不是转换回来。
答案 1 :(得分:3)
只需使用str_replace
将所有\n
替换为<br />
:
$tldr_clean = str_replace("\n", '<br />', $row['tldr']);
答案 2 :(得分:0)
$body_clean = str_replace(
["\r", "\n"],
['', '<br>'],
$row['body']
);