文本区域,新行和nl2br的问题


Problems with Textareas, New Lines and nl2br

我在从数据库中获取数据并在HTML页面文本区中回显时遇到麻烦。

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

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

这只是剥离HTML标记,除了数据库中的链接和存储。如果你查看数据库,换行符是看不见的,但在那里,所以我假设它们是'n和'r。

如果我在文本区输入:

This should be a 
New line

数据库将其存储为:

This should be a<br>
New line

当回显到文本区域时,显示的内容如下:

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

我肯定我遗漏了一些非常简单的东西,任何帮助都非常感谢。

更新:

如果我删除mysqli_real_escape_string,则保留了换行符并完美地工作,我是否必须为此牺牲安全性?

解决:

mysqli_real_escape_string导致问题,不要回显已经应用了这个的变量。只在从数据库中插入、删除等操作时使用mysqli_real_escape_string,不能在此之前使用,也不能在此之后使用;)

谢谢大家!

使用正确的HTML/CSS

; -)

在HTML前标记中,或者在CSS空白属性设置为:

的标记中,换行都是有效的
white-space: pre;

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

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

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

你很可能需要去掉斜杠echo stripslashes($_SESSION['content'])

编辑下面的注释:

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

这对我有用:

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

对于非常长的行,您还需要将文本换行,而不是可能脱离父容器。为了覆盖这种情况,并保留新行,使用以下css:

white-space: pre-wrap;

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

nl2br函数将该内容作为字符串处理:http://codepad.org/M2Jw9KQJ

这让我相信你并没有重复你所说的内容。

你确定DB中的内容是你所说的那样吗?也许你需要用另一种方式:

函数br2nl(元数据){返回preg_replace("! & lt; br。*祝辞! iU","' n",元数据);}