使用字符串替换的新行

时间:2016-05-19 19:00:32

标签: php jquery mysql

我从mysql数据库中获取数据时遇到问题。让我说我在mysql表中有这样的文字:

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Suspendisse lobortis sit amet est in dapibus. Cras in dui diam.

这个新行解决了这个问题。

我使用jQuery将数据回显给auto creatinig div。

以下是代码:

for(i = <?php echo $row; ?>; i > 0; i--){
    count = 1;
    <?php
        while($col = mysqli_fetch_assoc($result))
        {
            $cols[] = $col;
        }
        foreach($cols as $col){
    ?>
    $("#text"+count+"").text("<?php echo $col['post'] ?>");
    $("#username"+count+"").text("<?php echo $col['username'] ?>");
    count++;
    <?php } ?>
}

我尝试删除新行,或者使用<br>之类的字符串替换替换str_replace("\n", '<br />', $col['post']);,但它不起作用。我也尝试了很多其他代码,没有任何方法可以帮助我。

感谢您的建议

2 个答案:

答案 0 :(得分:1)

你可以更好地分离你的数据库访问逻辑和客户端javascript的东西。您还可以使用nl2br()将换行符转换为<br>。所以这样的事情会更好。

<?php
    $rows = array();
    while($row = mysqli_fetch_assoc($result)) {
        // replace new lines in post with HTML breaks
        $row['post'] = nl2br($row['post']);
        $rows[] = $row;
    }
?>
<script>
// create javascript literal by echoing out JSON serialization of $rows from PHP
var dbRows = <?php echo json_encode($rows); ?>;
// iterate through DB records and create elements
$.each(dbRows, function(index, row) {
    $('<div class="text">').text(row.post).appendTo('#someTargetElement');
    $('<div class="username">').text(row.username).appendTo('#someTargetElement');
});
</script>

您的方法有一些变化,包括:

  • 对来自数据库的检索数据使用nl2br()以准备在HTML中使用。
  • 提供PHP和javascript之间更好的分离。这是通过实际使javascript中的数据库数据可以操作而不是仅仅注入javasctipt来完成的。
  • 实际上创建一个新的div元素以附加到DOM。您的代码根本没有这样做
  • 抛弃#text*反模式。 id标签添加了什么价值?通常在使用像jQuery这样的库时,您希望所有类似的项具有相似的类,以便您可以将它们作为一个类进行操作。

答案 1 :(得分:0)

第一个

如果字符串输出到textarea或pre标签,\n将在字符串中生成新行。如果您不想换行,只需删除\n

第二个

如果字符串输出到另一个HTML标记,<br>将生成新行,只需将其删除即可停止转到新行。

第三次

在PHP中,您可以通过使用const PHP_EOL的concat字符串在长字符串中添加新行。例如:"Hello" . PHP_EOL . "Wolrd"

在jQuery中,$ .text()会将转义字符串放入elment的文本节点(内容),$ .html()会将原始html(作为字符串)插入到文档中。

最后

请不要将您的PHP代码放在一起Javascript。