我无法从数据库中获取数据并在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,而不是之前,绝对不是之后;)
谢谢大家!
答案 0 :(得分:5)
使用正确的HTML / CSS。
- )
该行会破坏HTML预标记中的所有工作,或者将CSS空白属性设置为的标记:
white-space: pre;
资源:
答案 1 :(得分:1)
首先,您不应该使用nl2br,因为这会将您的\n
更改为<br>
。
您很可能需要删除斜杠echo stripslashes($_SESSION['content'])
。
编辑以下进一步评论:
如果数据存储在数据库中<br>
,您只需执行str_replace('<br>',"\n",$string);
即可将<br>
转换为\n
的1} p>
答案 2 :(得分:1)
这对我有用:
function br2nl( $input ) {
return preg_replace( '/\<br.*\>/Ui', '', $input );
}
答案 3 :(得分:1)
对于非常长的行,您还需要包装文本,而不是可能会从其父容器中分离出来。要涵盖这种情况,还要保留新行,请使用以下css:
white-space: pre-wrap;
答案 4 :(得分:0)
nl2br函数正在将该内容用作字符串: http://codepad.org/M2Jw9KQJ
这让我相信你没有回应你声称自己的内容。
您确定数据库中的内容与您说的一样吗? 也许你需要反过来说:
function br2nl($ data){return preg_replace(“!&lt; br。*&gt;!iU”,“\ n”,$ data);}