【问题标题】:Convert escaped characters PHP [closed]转换转义字符PHP [关闭]
【发布时间】:2018-08-03 18:19:54
【问题描述】:

我知道这是一个简单的问题,但很难找到简单的解决方案。

我在我的 PHP 站点上有一个表单,它接收用户消息,然后向我的客户发送一封包含该消息的电子邮件。我希望发送给我的客户的消息易于阅读,没有转义字符 \r 、 \n 、 \" 等。

例如,邮件当前进入电子邮件的方式为:

test\'s\r\nnew line \r\n\"quote\"

我希望它是什么:

test's
new line 
"quote"

当前代码为:

if(isset($_POST['submit']) && !empty($_POST['email'])){
    //Process form
    $name = $_POST['name'];
    $name = mysql_prep($name);
    $email = $_POST['email'];
    $email = mysql_prep($email);
    $message = $_POST['message'];
    $message = mysql_prep($message);

    $emailto = "client_email1@gmail.com,client_email2@gmail.com";
    $subject = "Message from '$name'";
    // the message
    $message = "<html><body>
                <h3>Title</h3>
                From: $name<br>
                Email: $email<br><br>
                Message:<br>
                $message<br><br>

                </body></html>";
    //headers make the mail() work
    $headers = 'MIME-Version: 1.0' . "\r\n";
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

    mail($emailto, $subject, $message, $headers);

【问题讨论】:

  • 发现了错误,$message = mysql_prep($message);刚刚被移动到mail()函数之后,但是现在用户输入的换行符没有出现在消息中。知道如何在发送给客户的电子邮件中显示换行符吗?
  • mysql_prep() 是做什么的?
  • "发现错误,$message = mysql_prep($message); 只是在 mail() 函数之后移动了" - 那应该是原来的一部分帖子和您写的内容也应该添加到那里并作为附加编辑。
  • 对我来说似乎是可能的 SQL 注入,并且似乎与数据库相关。有几种方法可以不让这些反斜杠成为消息的一部分。
  • 你来这里寻求帮助,我们正在努力提供帮助,但你可能离开并试图自己解决这个问题,我们不知道这是否是这里发生的事情。我要求更新问题(在此评论之前 10 分钟),但我没有看到一个,也没有对我的一些 cmets 做出回应。我现在必须继续前进,因为我似乎一文不值;祝你好运,真的。

标签: php escaping


【解决方案1】:

您需要的是 stripslashes() 和 nl2br()。
nl2br 将使换行符成为 html br 标签。
Stripslashes 顾名思义,它删除了作为转义斜线的斜线。

echo stripslashes(nl2br($str));

示例:https://3v4l.org/RPYWt

【讨论】:

  • 不是我要找的,只是去掉了\r\n的斜线,但留下了rn
  • 不,它没有!看代码和链接
  • @Andreas 对;我看不到您发布的答案在这里失败了。我在他们的问题下发布了一些cmets;他们还在上面发表了评论。从“开始”开始,这个问题开始变得不清楚。
  • @AlexB str_replace 不起作用,不像我看到的那样。但是,如果您发现它是一个更好的答案,请发布它。您认为此答案不适用于什么?
【解决方案2】:

几个问题,首先是我的$message = mysql_prep($message); 函数正在创建转义字符,所以我只是将该函数放在mail() 函数之后。 mysql_prep()用于防止mysql注入。

其次,我需要$message = nl2br($message) 函数来维护用户从表单中输入的新行,以便客户端可以看到输入的消息。我将nl2br() 函数放在$message = $_POST['message']; 行之后。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多