首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将文本区保存为MySQL并保留换行符

问将文本区保存为MySQL并保留换行符
EN

Stack Overflow用户
提问于 2010-08-14 17:19:51
回答 3查看 19.9K关注 0票数 4

想象一个博客或cms系统(PHP和MySQL)。我想让用户在文本区域中输入一些文本并将其保存到数据库中。数据库中字段的类型为文本。

我想保留换行符并在以后打印它们。我知道使用PHP-function可以做到这一点,但是如何保护这个字符串免受nl2br注入攻击(假设我不能使用预准备语句)。如果我在它上面使用mysql_real_escape_string,它不会再显示换行符。

代码语言:javascript
复制
$text = 'one line
another line';
$text = mysql_real_escape_string($text);
/* save to db, fetch it some time later */
echo nl2br($text); /* output: one line\r\nanotherline */
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-08-14 17:24:42

mysql_real_escape_string不会删除换行符,它会对它们进行转义。

在存储字符串时对字符串进行转义,并在数据为输出时应用nl2br (可能与htmlspecialchars()结合使用,以防止用户输入原始的超文本标记语言)。这是最好的办法。

票数 9
EN

Stack Overflow用户

发布于 2015-01-29 01:33:59

mysqli_real_escape_string将用\r\n替换您的回车,因此您需要使用str_replace()取回它。但是,它仍然不会在您的浏览器/电子邮件客户端中显示。这就是nl2br()发挥作用的地方:

代码语言:javascript
复制
$text = 'one line
another line';
echo nl2br(str_replace("\\r\\n","
", mysqli_real_escape_string($dbc, $text )));

代码已经过测试,你可以使用它了。

票数 0
EN

Stack Overflow用户

发布于 2010-08-14 17:36:54

如果我对它使用mysql_real_escape_string,它不会再显示换行符。

难道您没有看到"\n"文字代替了换行符吗?

如果是这样的话,你的代码做了一些令人讨厌的事情,很可能你两次逃脱了你的数据。

或者,在从数据库获取数据后不执行mysql_real_escape_string()?

无论如何,您必须进行一些调试-调查,以查看每个stage上的数据发生了什么变化。只需打印出$_POST‘’textarea_name‘、SQL查询等。

看着你失去休息的那一刻,并找出一个违规者

备注:

mysql_real_escape_string不保护任何东西不受任何攻击。它可以转义分隔符。

nl2br不保留任何内容。它为换行符添加一个HTML标记。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3482725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档