phphtmlline-breaksnl2br

How can I replace newline or \r\n with <br/>?


I am trying to simply replace some new lines and have tried three different ways, but I don't get any change:

$description = preg_replace('/\r?\n|\r/', '<br/>', $description);
$description = str_replace(array("\r\n", "\r", "\n"), "<br/>", $description);
$description = nl2br($description);

These should all work, but I still get the newlines. They are double: "\r\r". That shouldn't make any of these fail, right?


Solution

  • There is already the nl2br() function that inserts <br> tags before new line characters:

    Example (codepad):

    <?php
    // Won't work
    $desc = 'Line one\nline two';
    // Should work
    $desc2 = "Line one\nline two";
    
    echo nl2br($desc);
    echo '<br/>';
    echo nl2br($desc2);
    ?>
    

    But if it is still not working make sure the text $desciption is double-quoted.

    That's because single quotes do not 'expand' escape sequences such as \n comparing to double quoted strings. Quote from PHP documentation:

    Note: Unlike the double-quoted and heredoc syntaxes, variables and escape sequences for special characters will not be expanded when they occur in single quoted strings.