【问题标题】:How to REPLACE \n with <br> in PHP如何在 PHP 中用 <br> 替换 \n
【发布时间】:2017-04-30 05:44:56
【问题描述】:

我已经尝试了nl2br() 以及 cmets here 中列出的所有方法。我遇到的问题是,即使他们确实插入了&lt;br/&gt;\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() 方法直接与存储在数据库中的字符串一起使用,它可以正常工作。所以我猜问题在于用变量调用方法?我该如何解决?

编辑:

字符串作为 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、iaculis semper 的 quam、justo dui maximus tellus、quis dictum urna velit sat amet justo。 Curabitur consectetur fringilla arcu,坐在 amet ultrices est dignissim eget。 Etiam non dapibus justo, et semper quam。 Suspendisse tristique augue sit amet gravida euismod。 Ut tempus metus quis nisl sagittis volutpat。 Nam rhoncus diam luctus dictum tristique。"

【问题讨论】:

  • 那你必须有一个文字'\n'。检查您插入的值,以确保您实际上插入的是换行符而不是反斜杠和 n。
  • 文档说Returns string with &lt;br /&gt; or &lt;br&gt; inserted before all newlines (\r\n, \n\r, \n and \r).所以这是预期的行为
  • 看这里接受的答案:stackoverflow.com/a/8627926/5530965 也许它作为 HTML 实体保存在数据库中?
  • 您的 \n 作为转义字符串存储在数据库中。你能展示你的代码是如何保存在数据库中的吗?
  • 如果您正在回显数据并且在输出中看到实际的\n,那么您所拥有的不是换行符,而是文字\ ,后跟@ 987654336@ 字符。通常,如果在代码中,这些会被转换为换行符,但如果在变量中的字符串中(例如从数据库中提取时),则不是。然后,您应该在 '\n' 上执行 str_replace(注意单引号,因此它不会被转换为换行符)。

标签: php


【解决方案1】:

如果您将数据回显并在输出中看到实际的\n,那么您所拥有的不是换行符,而是文字\ 后跟n 字符。通常,如果在代码中,这些会被转换为换行符,但如果在变量中的字符串中(例如从数据库中提取时),则不是。然后,您应该在 '\n' 上执行 str_replace(注意单引号,因此它不会转换为换行符)。

这可能是由您在插入时使用 addlashes 之类的东西完成的(会将 \n 换行符转换为 \\n),或者可能出于某种任意安全原因由数据库自动完成,而不是翻译回来。

【讨论】:

    【解决方案2】:

    只需使用str_replace 将所有\n 替换为&lt;br /&gt;

    $tldr_clean = str_replace("\n", '<br />', $row['tldr']);
    

    【讨论】:

    • 问题依然存在
    【解决方案3】:
    $body_clean = str_replace(
        ["\r", "\n"], 
        ['', '<br>'], 
        $row['body']
    );
    

    【讨论】:

    • 问题依然存在
    • 这可以用正则表达式实现吗?
    • 因此,您在此文本字段中没有真正的“\n”。您需要查看如何将数据保存到数据库。我认为,您正在保存转义数据。
    • 我已经用信息在数据库中的存储方式编辑了主帖:)
    • 所以,$body_clean = str_replace('\\n', '&lt;br&gt;', $row['body']);
    猜你喜欢
    • 1970-01-01
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    • 2012-11-10
    • 1970-01-01
    相关资源
    最近更新 更多