我工作的网站上有一个评论卡功能,在填写表格后,会发送一封php电子邮件给人们发送评论。然而,其中一个字符串,“评论”正在被切断。有人可以看看这段代码,并可能告诉我为什么? 编辑:做了一些测试,发现单引号和双引号导致问题。处理这个问题的任何建议都会很棒。我想使用stripslashes或其他吗?
以下是问题的一个示例:
Location: The place
Quality: Good
Comments: The Hot Dog at the Grill was labeled with the \\
Email: someemail@email.com
Date: 05/23/11
Time: 13:34
这是确认页面:(非常感谢,这是我工作的第一天,我无法理解这一点!
<?php
$date=date("m/d/y");
$time=date("H:i");
$loc=$_POST['location'];
$qual=$_POST['quality'];
$comm=$_POST['comments'];
$em=$_POST['email'];
echo("<p class=\"bodytext\">You are about to send the following information:<span><br><br><span class=\"bodytextbold\">Location:</span> ".$loc."<br><br><span class=\"bodytextbold\">How was your food?:</span>".$qual."<br><br><span class=\"bodytextbold\">Comments: </span>".$comm."<br><br><span class=\"bodytextbold\">Your email address: ".$em);
echo("<form method=\"post\" action=\"comment_card_email.html\">
<input type=\"hidden\" name=\"location\" value=\"".$loc."\">
<input type=\"hidden\" name=\"quality\" value=\"".$qual."\">
<input type=\"hidden\" name=\"comments\" value=\"".$comm."\">
<input type=\"hidden\" name=\"email\" value=\"".$em."\">
<input type=\"hidden\" name=\"date\" value=\"".$date."\">
<input type=\"hidden\" name=\"time\" value=\"".$time."\">
<input type=\"submit\" class=\"bodytext\" value=\"submit comments\" name=\"submit\"></form>");
?>
这是接收它的html页面php脚本:
<?php
$location = $_POST['location'];
$quality = $_POST['quality'];
$comments = $_POST['comments'];
$email = $_POST['email'];
$date = $_POST['date'];
$time = $_POST['time'];
$recipients = "someemail@email.com";
function mail_staff($recipients, $location, $quality, $comments, $email, $date, $time){
mail($recipients, "Comment Card#[".$location."]".time(), "The following comment has been submitted:
Location: $location
Quality: $quality
Comments: $comments
Email: $email
Date: $date
Time: $time
", "From:".$email);
}
答案 0 :(得分:2)
向前走,把我的评论拉到一起,并将它们合并到这个答案中。
您可能需要考虑将heredoc用于那些长回声语句,它会使它更清晰,更容易。
echo <<<FORM
<form method="post" action="comment_card_email.html">
<input type="hidden" name="location" value="$loc">
<input type="hidden" name="quality" value="$qual">
<input type="hidden" name="comments" value="$comm">
<input type="hidden" name="email" value="$em">
<input type="hidden" name="date" value="$date">
<input type="hidden" name="time" value="$time">
<input type="submit" class="bodytext" value="submit comments" name="submit"></form>
FORM;
你对“\”的评论让我觉得你不小心逃过了其余的字符串。确保您的报价不会导致问题。从您的示例注释的外观来看,用户看起来像是使用双引号并且转义了字符串的其余部分。请尝试使用htmlspecialchars来转义这些引号。 htmlspecialchars是一个PHP函数,可以从文本中转义HTML友好实体。所以报价将在&amp; xxxx;格式。因此,您不再需要担心转义报价,因为实体会处理这些报价。它与htmlspecialchars_decode可逆。所以这应该有用。
$raw = $_POST['comments'];
$stripped = stripslashes($_POST['comments'];
$comments = htmlspecialchars($stripped, ENT_QUOTES);
编辑:哎呀,表格没有通过heredoc,编辑它工作。