2

我无法从数据库中获取数据并在 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

当回显到 textarea 中时,会显示以下内容:

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

我确定我错过了一些非常简单的东西,非常感谢任何帮助。

更新:

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

解决了:

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

感谢大家!

4

5 回答 5

5

使用正确的 HTML/CSS。

;-)

换行符在 HTML pre 标记或 CSS white-space 属性设置为的标记中的所有工作:

white-space: pre;

资源:

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

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

于 2011-12-12T13:50:01.470 回答
1

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

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

编辑以下进一步评论:

如果数据以<br>'s 形式存储在数据库中,您只需str_replace('<br>',"\n",$string);<br>'s 转换为\n's

于 2011-12-12T13:38:59.810 回答
1

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

white-space: pre-wrap;

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

于 2015-04-04T07:04:59.387 回答
1

这对我有用:

function br2nl( $input ) {
    return preg_replace( '/\<br.*\>/Ui', '', $input );
}
于 2014-04-15T17:44:27.397 回答
0

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

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

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

函数 br2nl( $data ) {return preg_replace( "!<br.*>!iU", "\n", $data );}

于 2011-12-12T13:46:13.767 回答