将html变量从Ajax传递到PHP


Pass html variable from Ajax to PHP

我正试图使用此代码通过POST传递一个包含HTML 的变量

var data = {
    message: $('#mydiv').html()
};
jQuery.ajax({
    type: 'POST',
    data: data,
    url: '/myurl?action=send_email',
    success: function( response ) { }
});

在PHP中,我检索数据并使用数据内容发送电子邮件

$message = "Hello<br>" . $_POST['message'] . "<br>Bye Bye";
$mail = mail($email, $subject, nl2br($message), $headers);

我收到的电子邮件中的HTML格式不正确:

<img width="'&quot;70'&quot;" height="'&quot;87'&quot;" alt="'&quot;D_6928_antiqueoak_vapor'&quot;">

有人能告诉我为什么以及是否有解决方案吗?非常感谢

使用encodeURIComponent() 尝试此方法

var data = 'message='+$('#mydiv').html();
jQuery.ajax({
    type: 'POST',
    data: encodeVars(data),
    url: '/myurl?action=send_email',
    success: function( response ) { }
});

function encodeVars(vars){
    return vars.map(function (cell) {
        var res = cell.split('=');
        return res[0] + '=' + encodeURIComponent(res[1]);
    }) ;    
}

发送HTML电子邮件时始终设置内容类型

$headers = "MIME-Version: 1.0" . "'r'n";
$headers .= "Content-type:text/html;charset=UTF-8" . "'r'n";

我就是这样解决的。Javascript

var data = {
    message: $('#mydiv').html()
};
jQuery.ajax({
    type: 'POST',
    data: data.replace(/&/g, "&amp;")
            .replace(/"/g, "&quot;")
            .replace(/'/g, "&#039;"),
    url: '/myurl?action=send_email',
    success: function( response ) { }
});

PHP

$message = preg_replace('/&amp;/', '&', $_POST['message']);
$message = preg_replace('/&quot;/', '"', $message);
$message = preg_replace('/&#039;/', "'", $message);
$message = "Hello<br>" . $message . "<br>Bye Bye";
$mail = mail($email, $subject, nl2br($message), $headers);