为什么我的nl2br()函数显示\ r而不是break(<br/>)? PHP

时间:2010-03-31 18:17:01

标签: php

当我使用函数nl2br($ text)时,它不会显示我想要的中断,而是显示中断所在的\ r \ n。我显示一个用户的确认页面,显示他们在表单中输入的详细信息。

(the confirmation code in php)
// Confirm success with the user
    echo '<p>You have successfully posted a ad.'; 
    echo 'Here is your posting: <br /><br />';
    echo 'Title: ' .$title. '<br />' ;
    echo 'Price $: ' .$price.'<br />' ;
    echo 'Location: ' .$city. ' ' .$state. '<br />' ;
    echo '<b>Detail: </b>' .nl2br($detail). '<br />';

(The form users fill out)
<div class="fieldwrapper">
<label for="detail" class="styled">Detail:</label>
<div class="thefield">
    <textarea id="detail" name="detail"><?php if (!empty($detail)) echo $detail; ?></textarea>

(The output)
This is a test\r\n\r\ntesting is good\r\n\r\nWhy doesn\'t it work?

3 个答案:

答案 0 :(得分:2)

$input = 'this \r\nis what\r\ni want\r\n\r\n\r\nd'; 
echo nl2br(str_replace('\r', '', $input);

首先删除\ r \ n,这应该会有所帮助。

答案 1 :(得分:0)

因为\ r \ n不是newline character in the *nix sense(又名“line feed”字符) - 它是“carriage return”字符。

historical reasons why both exist,但是现在我们的程序员必须处理这个问题真的很麻烦。

正如JonnyLitt所说 - 你必须在使用nl2br()之前自己删除\ r \ n字符。

答案 2 :(得分:0)

\r在您的文字中已经不是回车符号,而是字面意思的2符号序列 - 由r字母吹过的反斜杠。 您必须在代码中找到一个将换行符转换为\r序列的位置。 mysql_real_escape_string()之后的addslashes可以做的事情

更新:
你的评论后,我明白了。 您使用单引号来分隔字符串。
READ PHP语法,不用担心。真实数据没问题。