【发布时间】:2018-12-03 19:35:19
【问题描述】:
我正在使用一个简单的联系表格:http://luiszuno.com/previews/formy/ 问题是,每当在表单上输入字符“&”时,电子邮件中都不会收到“&”之后的其余消息。编辑:添加了代码,除了缺少数据问题外,表单可以正常工作。什么可能导致此问题?
jQuery(document).ready(function($) {
$("#formy").on( "submit", function( event ) {
$(this).serialize();
});
// Hide messages
$("#formy-success").hide();
$("#formy-error").hide();
$("input,textarea").blur(function(){
$(this).css("border-color","#596a87");
});
// on submit...
$("#formy #submit").click(function() {
$(this).serialize();
// Required fields:
//name
var name = $("#name").val();
if(name == "" || name == "Name *"){
$("#name").focus();
$("#formy-error").fadeIn().text("Name required");
$("#name").css("border-color","#a22528");
return false;
}
else {$("#name").css("border-color","#596a87");}
// email
var email = $("#email").val();
if(email == "" || email == "Email *"){
$("#email").focus();
$("#formy-error").fadeIn().text("Email required");
$("#email").css("border-color","#a22528");
return false;
}
else {$("#email").css("border-color","#596a87");}
// email validation
function validateEmail(email) {
var filter = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;
return filter.test(email);
}
if (!validateEmail(email)) {
$("#formy-error").fadeIn().text("Invalid email address");
$("#email").css("border-color","#a22528");
return false;
}
//budget
var budget = $("#budget").val();
if(budget == "" || budget == "Budget"){
return false;
}
// comments
var comments = $("#comments").val();
if(comments == "" || comments == "Message *"){
$("#comments").focus();
$("#formy-error").fadeIn().text("Message required");
$("#comments").css("border-color","#a22528");
return false;
}
else {$("#comments").css("border-color","#596a87");}
// send mail php
var sendMailUrl = $("#sendMailUrl").val();
// Retrieve values for to, from & subject at the form
var to = $("#to").val();
var from = $("#from").val();
var subject = $("#subject").val();
// Create the data string
var dataString = 'name=' + name
+ '&email=' + email
+ '&comments=' + comments
+ '&to=' + to
+ '&from=' + from
+ '&budget=' + budget
+ '&subject=' + subject;
// ajax
$.ajax({
type:"POST",
url: sendMailUrl,
data: dataString,
success: success()
});
});
// On success...
function success(){
$("#formy-success").fadeIn(250).text("Thanks, I will contact you soon!");
$("#formy-error").hide();
$("#formy fieldset").slideUp(250);
}
return false;
});
发送邮件.php
<?php header("Content-Type: text/html; charset=utf-8");
//vars
$subject = $_POST['subject'];
$to = explode(',', $_POST['to'] );
$from = $_POST['email'];
//data
$msg = "NAME: " .$_POST['name'] ."<br>\n";
$msg .= "EMAIL: " .$_POST['email'] ."<br>\n";
$msg .= "BUDGET: " .$_POST['budget'] ."<br>\n";
$msg .= "COMMENTS: " .$_POST['comments'] ."<br>\n";
//Headers
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=UTF-8\r\n";
$headers .= "From: <".$from. ">" ;
//send for each mail
foreach($to as $mail){
mail($mail, $subject, $msg, $headers);
}
?>
【问题讨论】:
-
链接在这里不起作用。请添加一个 sn-p 或关闭为 no minimal reproducible example。
-
好吧,我们看不到您的代码,因此很难说太多,除了我怀疑您可能没有对表单数据进行 URI 编码。 & 是查询字符串和 POST 数据字符串中的特殊字符 - 它用于表示下一个参数的开始
-
好吧,就像我说的,你需要对数据进行 URIencode。通常,如果您只是告诉 jQuery 序列化您的表单,或者为它提供一个包含您的数据的 JavaScript 对象,那么它会自动为您进行编码。大概您正在手动构建输入数据或其他东西。问题在于您的客户端代码而不是您的 PHP。问题在于发送到服务器的内容,而不是服务器到达时对其进行的处理。
-
@ADyson 我的 jQuery 在 index.php 文件中,而不是在联系表单上,我还能使用序列化吗?不确定如何使用 URIencode 在 $_POST 之前自动处理整个输入字段。 htmlspecialchars也可以用吗?
-
“我的 jQuery 在 index.php 文件上,而不是在联系表单上”......不知道你的意思。一旦 jQuery 代码被加载到页面中,它的来源就无关紧要了。如果您使用 jQuery/AJAX 提交表单并且代码正在处理表单的提交,那么您可以序列化表单。因此,请向我们展示表单以及您当前用于提交表单的代码。您可以将上面的所有 PHP 删除,它不相关。
标签: php jquery character contact-form