使用PHP / MYSQL来转义电子邮件中的字符

|| 当我在PHP中使用
mail()
函数时,我很难弄清楚如何转义字符背后的逻辑。我使用的是PHP 5.2,其中magic_quotes_qpc为ON,运行时/ sybase为OFF。这是问题所在。 一个具有接受文本输入的格式,我使用ѭ1来转义特殊字符以在SQL语句中使用,例如:
$text = mysqli_real_escape_string($dbc, $_GET[\'text\']);
如果我在表单中输入以下注释“我不会吃那个!”,我将在数据库中看到以下内容:“我不会吃那个!”,这是我期望的。如果我添加回车符/换行符,我在phpMyAdmin的数据库字段中看到的就是回车符和换行符,它们没有特殊字符(即没有\“ \\ r \\ n \”或类似的东西)。 当我使用
mail
函数发送消息(即
mail($to, $subject, $text, $headers)
)时,我在电子邮件正文中得到了类似的奇怪信息:
I wouldn\\\\\\\'t eat that\\r\\nI couldn\\\\\\\'t eat that
最后,我只希望电子邮件输出的格式与表单输入完全相同,换句话说:
I wouldn\'t eat that
I couldn\'t eat that
我不确定为什么撇号前会有三次转义,为什么\\ r \\ n出现在我的电子邮件中。
已邀请:
魔术引号是不好的。不要使用它们。 http://www.php.net/manual/zh/security.magicquotes.whynot.php 如果您使用魔术引号和mysqli_real_escape_string,那么这说明了为什么字符串会被双重转义。
$text = mysqli_real_escape_string($dbc, $_GET[\'text\']); // $_GET[\'text\'] is already escaped

...

mail($to, $subject, $text, $headers); // Now $text contains a doubly escaped string
关闭魔术引号(确保您是应用程序可以处理),仅在插入数据库时​​转义(如果使用参数化查询,即PDO或mysqli,则无需转义!)。 作为最后的选择,您可以尝试在字符串上使用反斜杠。
从MySQL数据库检索结果时,由于某些原因,您需要在输出上使用ѭ8,否则它们仍将包含转义斜杠。 编辑: 然后,可以执行ѭ9修复换行符。

要回复问题请先登录注册