我在从数据库中获取数据并在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",元数据);}