Textareas,New Lines和nl2br的问题

时间:2011-12-12 13:30:49

标签: php mysql nl2br

我无法从数据库中获取数据并在HTML页面textarea中回显。

这是用于将数据导入数据库的代码:

$_SESSION['content'] = mysqli_real_escape_string($link, strip_tags($_POST['content'],'<a>'));

除了数据库中的链接和存储之外,它简单地剥离HTML标记。如果您查看数据库,换行符是不可见的,但我认为它们是\ n和\ r。

如果我要输入textarea:

This should be a 

New line

数据库将其存储为:

This should be a<br>
New line

当回显到textarea时,这就是显示的内容:

This should be a \r\n\r\nNew line

我确信我错过了一些非常简单的事情,非常感谢任何帮助。

更新

如果我删除mysqli_real_escape_string,换行符会被保留并完美运行,我是否必须为此牺牲安全性?

解决:

mysqli_real_escape_string导致问题,请不要回显已应用此变量的变量。从数据库插入,删除等时才使用mysqli_real_escape_string,而不是之前,绝对不是之后;)

谢谢大家!

5 个答案:

答案 0 :(得分:5)

使用正确的HTML / CSS。

- )

该行会破坏HTML预标记中的所有工作,或者将CSS空白属性设置为的标记:

white-space: pre;

资源:

http://www.w3schools.com/cssref/pr_text_white-space.asp

http://www.quirksmode.org/css/whitespace.html

答案 1 :(得分:1)

首先,您不应该使用nl2br,因为这会将您的\n更改为<br>

您很可能需要删除斜杠echo stripslashes($_SESSION['content'])

编辑以下进一步评论:

如果数据存储在数据库中<br>,您只需执行str_replace('<br>',"\n",$string);即可将<br>转换为\n

答案 2 :(得分:1)

这对我有用:

function br2nl( $input ) {
    return preg_replace( '/\<br.*\>/Ui', '', $input );
}

答案 3 :(得分:1)

对于非常长的行,您还需要包装文本,而不是可能会从其父容器中分离出来。要涵盖这种情况,还要保留新行,请使用以下css:

white-space: pre-wrap;

资源:https://css-tricks.com/almanac/properties/w/whitespace/

答案 4 :(得分:0)

nl2br函数正在将该内容用作字符串: http://codepad.org/M2Jw9KQJ

这让我相信你没有回应你声称自己的内容。

您确定数据库中的内容与您说的一样吗? 也许你需要反过来说:

function br2nl($ data){return preg_replace(“!&lt; br。*&gt;!iU”,“\ n”,$ data);}