【发布时间】:2015-01-31 14:55:13
【问题描述】:
我的代码如下
$ID = mysqli_real_escape_string($cnx, trim($data->id));
$MSG = mysqli_real_escape_string($cnx, trim($data->message));
$query = "REPLACE INTO mytbl ".
"(id, msg, dateentry, status, rate) ".
"VALUES ('$ID', '$MSG', NOW(), 'ok', '$RATE')";
$result =mysqli_query($cnx, $query) or die ("Can't execute query!");
$to = 'my@gmail.com';
$subject = 'my report';
$message = 'Message From User on: '. $MSG . "\r\n";
$headers = 'From: anonymous@mymail.com' . "\r\n" .
'Reply-To: anonymous@mymail.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);
在我的消息 ($MSG) 中,它包含换行符,由 \n 表示。因此,当发送电子邮件时,\n 保持不变,而不是换行,它保持为 \n。我希望它是一个新行,而不是在电子邮件中显示 \n。
我已经阅读了关于How to replace \r & \n with <br/>? 的信息,并认为也许我可以使用双引号而不是单引号,并使用 nl2br,但没有成功。也许我的值来自其他地方(即 $data->message),所以我不知道如何使它成为单引号或双引号字符串。有什么需要解释的吗?
谢谢!
(注意 $MSG 既用于 DB 插入也用于发送电子邮件)
【问题讨论】:
-
所以你是说
$MSG包含文字'\n'转义而不是换行符?在尝试解决方法之前,请先了解这是如何发生的。 (如 stripcslashes) -
“也许我可以使用双引号而不是单引号” - 是的,因为
'\n'会在字面上显示为\n,而使用"\n"会给你一个换行符。 -
你要找出$MSG是从哪里来的,找到问题的根源。
-
谢谢大家。根据我上面的编辑,我更详细地检查了 $MSG 的行来自 mysqli_real_escape_string(...)。如果我删除 mysqli_real_escape_string,然后我得到我的新行。但是为了安全起见,我相信我需要使用 mysqli_real_escape_string ......那么我怎么能这样做,但得到我的新行?
-
您需要向我们展示更多代码,即与查询相关的代码。如果查询“不是”来自用户输入,则不需要转义数据。如果您需要从不会作为数据库中的插入/更新的表单过滤用户输入,只需使用 PHP 的过滤器,而不是 MySQL 的过滤器。您还可以为外发邮件设置一个新变量。