PHP строка обрезается при отправке по электронной почте: пожалуйста, помогите с простым исправлением ошибки - PullRequest
1 голос
/ 19 марта 2012

На веб-сайте, на котором я работаю, есть функция карточки с комментариями, по которой после заполнения форм осуществляется отправка php-сообщения по электронной почте для получения комментариев. Тем не менее, одна из строк, «комментарии» обрезается. Может ли кто-нибудь взглянуть на этот код и, возможно, сказать мне, почему? РЕДАКТИРОВАТЬ: сделал некоторые испытания и обнаружил, что одинарные и двойные кавычки вызывают проблему. Любой совет по этому поводу был бы великолепен. Хочу ли я использовать полоски или что-то подобное?

Вот пример проблемы:

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>");
?> 

А вот скрипт hpml page 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);
}

1 Ответ

2 голосов
/ 19 марта 2012

Продолжил, собрал мои комментарии и соединил их в этом ответе.

Возможно, вы захотите использовать 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-дружественные объекты от текста.Таким образом, кавычки будут в & xxxx;формат.Таким образом, вам больше не нужно беспокоиться об экранировании кавычек, так как об этом позаботятся сущности.И это обратимо с htmlspecialchars_decode .Так что это должно работать.

$raw = $_POST['comments'];
$stripped = stripslashes($_POST['comments'];
$comments = htmlspecialchars($stripped, ENT_QUOTES);

Редактировать: Упс, форма не прошла через heredoc, отредактировала ее для работы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...