邮件 - 在收到的电子邮件中可见 \r\n 个字符 [重复]
Posted
技术标签:
【中文标题】邮件 - 在收到的电子邮件中可见 \\r\\n 个字符 [重复]【英文标题】:Mail - \r\n characters visible in recieved email [duplicate]邮件 - 在收到的电子邮件中可见 \r\n 个字符 [重复] 【发布时间】:2021-05-19 19:23:38 【问题描述】:我正在向自己发送一封测试电子邮件,其中包含插入到表单中的值。
我收到了电子邮件,但“格式”很奇怪,\r\n
是可见的。我也试过%0D%0A
和</br>
(虽然没有指定它是html),它也是可见的。我也试过php_EOL
。
此外,我还在第一封电子邮件之后收到了第二封电子邮件,但它只包含之前表单的一小部分。
第一封电子邮件:
Date of arrival: 19-02-2021%0D%0A
Date of departure: 27-02-2021%0D%0A
Room selected: Room 01 %0D%0A
Name: dread%0D%0A
Surname: Zxy%0D%0A
Email myemail@gmail.com%0D%0A
Phone number: 012345678
第二封电子邮件:
Date of arrival: 19-02-2021%0D%0A
Date of departure: 26-02-2021%0D%0A
编辑 我刚刚注意到第二封电子邮件的出发日期与第一封不同。我不知道为什么会这样,所以我也会添加 jQuery 代码。
如果有人知道如何解决这个问题,我将非常感激。
代码:
<?php
if(isset($_POST['submit']))
$arrivalDate = $_POST['arrivalDate'];
$departureDate = $_POST['departureDate'];
$room = $_POST['room'];
$user_name = $_POST['user_name'];
$surname = $_POST['surname'];
$email = $_POST['email'];
$tel = $_POST['tel'];
$to = $_POST['email'];
$subject = 'Reservation';
$body = 'Date of arrival: '.$arrivalDate.'\r\n
Date of departure: '.$departureDate.'\r\n
Room selected: '.$room.'\r\n
Name: '.$user_name.'\r\n
Surname: '.$surname.'\r\n
Email '.$email.'\r\n
Phone number: '.$tel;
wp_mail( $to, $subject, $body );
echo "Sent!";
?>
jQuery(document).ready(function($)
$("#arrivalDate").datepicker(
minDate: 'dateToday',
dateFormat: 'dd-mm-yy',
onSelect: function (date)
$("#departureDate").datepicker('option', 'minDate', date);
);
$("#departureDate").datepicker(
dateFormat: 'dd-mm-yy'
);
);
【问题讨论】:
%0D%0A
垃圾在你的字符串中做什么?只需在双引号内使用\r\n
。
已编辑。这是我的电子邮件的“内容”。你是说应该是"\r\n"
?
它们在字符串之外。这段代码对我来说毫无意义。请记住,双引号,而不是单引号。
好吧,你说的'string displayed' . $variable . "\r\n"
不,我在回答中添加了一个更好的例子。使用连接和两种不同的引用风格,你会弄得一团糟。
【参考方案1】:
在 PHP 中,单引号和双引号之间存在天壤之别:
<?php echo('\r\n'); ?>
这产生\r\n
,字面意思是文本,而这个:
<?php echo("\r\n"); ?>
根据需要实际发出 CRLF。
单引号字符串没有内插,并且不支持控制字符,如\r
。双引号字符串可以。
话虽如此,有更好的表达方式:
<?php
$body = implode("\r\n", [
"Date of arrival: $arrivalDate",
"Date of departure: $departureDate",
"Room selected: $room",
"Name: $user_name",
"Surname: $surname",
"Email $email",
"Phone number: $tel"
]);
让字符串插值为您完成工作,然后使用implode()
将它们连接在一起。
在您的代码中,您不仅要输入\r\n
,而且字符串跨越多行,您至少还包括一个LF,另一个无关紧要的\n
。
这意味着:
<?php
echo('I love
newlines!');
?>
已经包含一个换行符。
【讨论】:
好的。谢谢你。带双引号的"\r\n"
确实解决了它,但我可能会使用你的答案。如果我想在正文中添加额外的字符串(让我们说:谢谢您的注册。您从 xy 到 yx 保留了 room1,内爆也可以处理)?我会在 2 分钟内接受 anwser。需要等待...
你可以随时根据需要添加额外的行,这种格式非常开放。
是的,继续字符串。抱歉有点累。我实际上对此有一个疑问。如何直接在变量旁边添加字符。类似"price: €$price_per night"
?
你可以添加任何你想要的东西,PHP strings 相当灵活。
文档解释得更详细,但通常只吸收“类变量”组件。 $room!
很好。 $rooms
如果你想要 s
单独不是,你必须做 $rooms
。以上是关于邮件 - 在收到的电子邮件中可见 \r\n 个字符 [重复]的主要内容,如果未能解决你的问题,请参考以下文章