我构建了一个简单的jQuery AJAX请求,该请求在数据库中查询所选模板,然后返回电子邮件主题和电子邮件正文并将其插入到html输入字段中。这一切都运作良好。
我刚刚注意到,当数据插入电子邮件正文时,它看起来像这样:
Dear Sally & John, thank you for your call today . . .
而不是:
Dear Sally & John, thank you for your call today . . .
此外,电子邮件正文中还有占位符,用户通常会手动更改:
Dear <<dear>>,
这些出现在:
Dear <<dear>>
我正在使用PHP查询数据库并将数据作为JSON返回:
$templateDetails[] = array('templateBody' => $updatedTemplateBody);
echo json_encode($templateDetails);
以下是调用PHP请求的脚本:
$(document).ready(function() {
$("#templateRef").change(function() {
var templateRef = $("#templateRef").val();
var contactID = '<?php echo $contactID; ?>';
$.post('getSMSTemplate.php', {
contactID: contactID,
templateID: templateRef
}, function(data) {
data = JSON.parse(data);
if (data.error) {
alert("error");
$("#messageBody").html('');
return; // stop executing this function any further
} else {
// console.log( data[0].templateBody );
$("#messageBody").val(data[0].templateBody);
}
}).fail(function(xhr) {
$("#messageBody").html('');
});
});
});
我可以调用一些函数来逃避这些字符吗?不确定这是用JavaScript还是PHP完成的,或者从哪里开始?
答案 0 :(得分:0)
此部分:$("#messageBody").val(data[0].templateBody);
可以改为$("#messageBody").html(data[0].templateBody);
。
答案 1 :(得分:0)
您可以使用htmlspecialchars_decode()
在您的php中处理服务器端,在echo
JSON退出之前生成响应时,您可以调用它。
<?php
$str = "<p>this -> "</p>\n";
echo htmlspecialchars_decode($str);
// note that here the quotes aren't converted
echo htmlspecialchars_decode($str, ENT_NOQUOTES);
?>
输出:
<p>this -> "</p>
<p>this -> "</p>
(来自PHP手册) https://secure.php.net/manual/en/function.htmlspecialchars-decode.php
答案 2 :(得分:0)
那些“特殊字符”:它们实际上是HTML编码的文本。问题不在您在问题中发布的代码中。这是一个快速证明:
var data = "<< me & you >>"
$("#messageBody").val(data);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="messageBody" />
正如您所看到的,代码正确显示“特殊字符”,因此问题是由其他内容引起的,如果不了解有关项目的更多详细信息,我只能想到两种可能性。
1)它们会像数据库中那样保存,因此请检查确认。在这种情况下,您可以使用htmlspecialchars_decode()
在将echo
作为JSON之前对数据库数据进行解码,也可以使用$('<div/>').html(data[0].templateBody).text();
在上面的jQuery中对其进行解码。这是一个测试:
var data = "<< me & you >>"
data = $('<div/>').html(data).text();
$("#messageBody").val(data);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="messageBody" />
2)当您生成电子邮件时,文本会被编码。如果来自数据库的文本未经编码且您的messageBody
正确显示,那么您需要检查从messageBody
抓取文本以生成电子邮件的代码。如果您需要帮助,请在您的问题中发布该代码。