通过 ajax 发送 HTML - 在标签中添加反斜杠

Sending HTML via ajax - adds a backsklash in a tag

下面的问题。我得到一个带有占位符标签的文本块,用正确的内容替换这些占位符并将这个文本块放在文本区域中。 jquery val().

在此文本区域中,所有内容均显示正确。换行符和 URL link。 (a标签的HTML)

如果我现在得到这个 val() 并通过 Ajax 将它发送到发送邮件的 PHP 函数,就会出现问题。文本块是邮件的正文。

文本块在邮件中正确显示,加粗标签,换行,没问题。

但是使用 a 标签我得到了反斜杠。

我现在看了很多,有转义,json等,但是都不成功

可能是我迷路了。谁能告诉我它在哪里并指出正确的方向。

这里有一些代码摘录。

$( ".jsClickClaimsSendSH" ).click(function() {
    var ajaxurl = $(this).data("ajax");
    var action = 'claim_defects_breach_of_contract_send_mail';
    
    var claimtype = $(this).data("claimtype");
    var leadID = $(this).data("leadid");
    var uniqueid = $(this).data("uniqueid");
    
    var subject = $("#claimsmailbodycontainer .claimssubjectbody").val();
    var mailbody = $("#claimsmailbodycontainer .claimsmailbody").val();

    $.ajax({
        type: "POST",
        url: ajaxurl,
    
        data: {
            action : action,
            claimtype : claimtype,
            leadID : leadID,
            uniqueid : uniqueid,
            subject : subject,
            mailbody : mailbody
        },
        success: function( result ){
        }
    });         
    
    
});

在 PHP 函数中它看起来像这样

$mailbody = $_POST['mailbody'];


$headers = [];
$headers[] = 'From: '.$mailFrom;
$headers[] = 'Reply-To: '.$mailReplyTo;        
$headers[] = 'Content-Type: text/html; charset=UTF-8';
$headers[] = 'X-Mailer: PHP/' . phpversion(); 

ob_start();
include_mail_template_php ($getPageLanguage.'/claimmail');
$message = ob_get_contents();
ob_end_clean(); 

// '%%text-body%%' is placeholder tag in the mail template for the $mailbody
$variables = array(
    '%%text-body%%',
); 

// set replacements for variables
$values = array(
    $mailbody
);

$message = str_replace( $variables, $values, $message );


wp_mail($empfaenger, $subject, $message, $headers);

邮件中a标签的HTML是这样的。你不能点击 link.

   <a+href="http://localhost/abc/page/?l=6194a9edac24c"+target="_blank">more</a>

添加1

在 jquery 调用的请求中,HTML 看起来仍然不错。

  <a+href="http://localhost/abc/page/?l=6194a9edac24c"+target="_blank">hier</a>

占位符标记所在的邮件模板部分。此占位符将替换为邮件正文文本。

<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
    <td style="padding: 20px; font-family: sans-serif; font-size: 15px; line-height: 20px; color: #555555; background-color: white; white-space: pre-line; ">
        <p style="margin: 0;">
            %%text-body%%
        </p>
    </td>
</tr>  

添加2

一天是从哪里来的。 我用 ACF 保存了一个文本,占位符是这样的

  <a href="%%LinkInvoice%%" target="_blank">more</a>

您是否尝试过使用 wp_unslash() 函数。

在这种情况下的用法类似于:

$message = str_replace( $variables, $values, $message );
$message = wp_unslash( $message ); // Strip slashes here!


wp_mail($empfaenger, $subject, $message, $headers);

或者甚至...

// set replacements for variables
$values = array(
    wp_unslash( $mailbody )
);

您的问题没有提供足够的信息来说明示例 <a> 标记输出的来源。