MIME 1.0 URL содержит% 0D% 20 - PullRequest
       31

MIME 1.0 URL содержит% 0D% 20

0 голосов
/ 14 февраля 2019

У меня есть сценарий PHP, который отправляет электронное письмо пользователю при отправке, но я столкнулся с проблемой, когда встроенная ссылка в сообщении содержит% 0D% 20 в самом URL.

Я не могу понять, как от этого избавиться, поскольку, когда вы нажимаете на ссылку, это, очевидно, не ссылка.

Отображаемый URL-адрес правильный, без% 0D% 20, однако, когда вы наводите курсор на тег, я вижу эту информацию.

Когда вы нажимаете на ссылку, она открывается как:

https://URL/public/dermatology/2019/client_generatePDF.p%0D hp?id=21%08 8&pid=Horus 

Где теперь находится% 0D в середине расширения php и% 08 в середине идентификатора базы данных из $ last_id, то есть идентификатора записи, вставленной вбаза данных

Я также пробовал href = '". $ url_pdf."'

Это часть ссылки скрипта.

$message .= "<tr><td colspan='2'>Link to full history: <a href='$url_pdf' target='_blank'>" . $url_pdf ." </a></td></tr>";




$last_id = $stmt->insert_id;
    $PetName2 = trim($_POST['Pet_Name']);

    $url = "https://URL/public/dermatology/2019/client_upload_form.php?id=". $last_id . "&pid=" . $PetName2 ;
    $url_pdf = "https://URL/public/dermatology/2019/client_generatePDF.php?id=". $last_id . "&pid=" . $PetName2 ;

    $email = "SEND EMAIL";
    $to = "EMAIL, $ClientEmailAddress";
    $from = "VMC Dermatology Form Submission";
    $subject = "Dermatology Client Form Submission: " . $UMNCaseNo . "";

    $headers = "From: " . strip_tags($email) . "\r\n";  
    $headers .= "MIME-Version: 1.0 \r\n";
    $headers .= "Content-type: text/html; charset=iso-8859-1 \r\n";

    $message = '<html><body><h3>A Dermatology Consultation Has Been Submitted.</h3><br />';
    $message .= "<br />";
    $message .= "<br />";
    $message .= "Thank you&nbsp; " . $Client_First_Name ." &nbsp; for filling out the Dermatology Questionnaire for your pet " .$Pet_Name . ".&nbsp;Your information has been received. If applicable, you may submit photos regarding your pets skin condition using the following link. <a href='" .$url. "' > ". $url ."</a>";
    $message .= "<br />";
    $message .= "<br />";
    $message .= "<table rules='all' style='border-color: #666;' cellpadding='10'>";
    $message .= "<tr style='background: #eee;'>  <td width='178px'><strong>Today's Date:</strong> </td>  
                  <td width='380px'>" . $date2 . "</td></tr>";
    $message .= "<tr> <td><strong>Case Number:</strong></td>  <td>" . $UMNCaseNo . "</td></tr>";
    $message .= "<tr> <td><strong>Clinic to Be Seen at:</strong></td>  <td>" . $ClinicToBeSeenAt . "</td></tr>";
    $message .= "<tr><td colspan='2'>&nbsp;</td></tr>";
    $message .= "<tr> <td><strong>Client Name:</strong> </td><td>" . $Client_First_Name . " ". $Client_Last_Name ."</td></tr>";
    $message .= "<tr><td><strong>Client Phone Number:</strong></td> <td>" . $Phone . "</td></tr>";
    $message .= "<tr><td><strong>Client Email:</strong></td> <td>" . $ClientEmailAddress . "</td></tr>";
    $message .= "<tr><td colspan='2'>&nbsp;</td></tr>";

    $message .= "<tr><td colspan='2'>&nbsp;</td></tr>";
    $message .= "<tr><td><strong>Pet Name:</strong></td> <td>" . $Pet_Name . "</td></tr>";  
    $message .= "<tr><td><strong>Species:</strong></td> <td>" . $Species . "</td></tr>";    
    $message .= "<tr><td><strong>Breed:</strong></td> <td>" . $Breed . "</td></tr>";
    $message .= "<tr><td colspan='2'>&nbsp;</td></tr>";
    $message .= "<tr style='background: #eee'><td colspan='2'><strong>Reason for Visit:</strong></td></tr>";
    $message .= "<tr><td colspan='2'>" . $Reason_for_Visit . "</td></tr>";
    $message .= "<tr><td colspan='2'>&nbsp;</td></tr>";
    $message .= "<tr><td colspan='2'>Link to full history: <a href='$url_pdf' target='_blank'>" . $url_pdf ." </a></td></tr>";
    $message .= "<tr><td colspan='2'>&nbsp;</td></tr>";
    $message .= "</table>";
    $message .= "</body></html>";
    $message .= "<br />";

if(mail($to,$subject,$message,$headers)){

1 Ответ

0 голосов
/ 14 февраля 2019

%0D%20 - разрыв строки в кодировке URL, за которым следует пробел.Браузеры будут отображать его расшифрованную версию, поэтому вы видите ее только при опрокидывании.Отфильтруйте имена файлов по таким символам, например, с помощью:

$url_pdf = preg_replace('/[ \n\r\t]/', '', $url_pdf);

Вам, конечно, необходимо убедиться, что ваши файлы сохранены с использованием этого отфильтрованного имени, в противном случае загрузка будет прервана.

Я бы также рекомендовал использовать PHPMailer, поскольку вы пометили вопрос им.

...