双重使用mysql_real_escape_string插入换行符。如何恢复换行符?

5
我有一个文本域字段插入到mysql数据库中,其中可能包含换行符。该文本域数据意外地通过两个mysql_real_escape_string函数。因此,字段数据的换行部分现在存储为“\r\n”,而不是实际的新行,因为它已经被双重转义?
现在,当写回到文本域HTML字段进行编辑时,“\r\n”显示出来,而不是新行。
问题:如何纠正这种情况,使其再次成为新行?

首先,为什么这些内容要经过两次转义操作呢? - Pekka
@Pekka,他说那是一次意外。 - Mike Sherov
为了避免将来出现这种问题,我强烈建议使用预处理语句,这样您就不需要使用 mysql_real_escape_string()addslashes()。同时,请确保在您的 PHP 配置中禁用了 magic_quotes_gpc - Lèse majesté
4个回答

5

您可能正在使用mysql_real_escape字符串两次进行转义 - 一次作为输入过滤器(错误!),一次作为SQL数据准备。您必须摆脱第一个。

或者,作为输入过滤器使用一次,并使用预处理语句进行查询。同样要摆脱第一个。


3

您一定要解决导致双重转义的情况。

已经以这种方式处理的内容的快速修复方法是:

str_replace("\\r\\n", "\r\n");

-1

试试这段代码

$tval = str_replace("\\r\\n", "\r\n",mysql_real_escape_string(trim($tval)));

-1
要获取您的原始内容,您需要执行反向操作。编写一个脚本,从表中选择现有行,并在不转义输入的情况下更新列值。这将实质上将正确转义的输入存储回单个值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接