PHP电子邮件表单正在通过,单词之间没有空格,也没有特殊字符
Posted
技术标签:
【中文标题】PHP电子邮件表单正在通过,单词之间没有空格,也没有特殊字符【英文标题】:PHP email form is coming through without spaces between words and no special characters 【发布时间】:2016-06-16 10:55:06 【问题描述】:我已经构建了一个通过 AJAX 使用 php 邮件功能发送的表单。我的问题是当我的电子邮件通过时,所有空格都被替换为“+”,特殊字符被替换为“%40”之类的东西。
这是我的 AJAX 脚本:
<script>
jQuery(document).ready(function($)
$('.builderForm').each(function()
$(this).on("submit", function(event)
event.preventDefault();
var formData = $(this).serialize();
var loading = '<div id="overlay"><img id="loading" src="<?php echo LAYERS_FORM_BUILDER__PLUGIN_URL;?>assets/images/loading.gif"></div>';
$(loading).appendTo('body');
$.ajax(
type : 'POST', // define the type of HTTP verb we want to use (POST for our form)
url : '<?php echo LAYERS_FORM_BUILDER__PLUGIN_URL;?>includes/class-send-form.php', // the url where we want to POST
data : 'formData' :formData, // our data object
dataType : 'json', // what type of data do we expect back from the server
encode : true
)
.done(function(data)
// log data to the console so we can see
//console.log(data);
setTimeout(function()$('#overlay').hide();, 4000);
$('#overlay').remove();
$('.successMsg').html("Message Was Sent Successfully!!");
setTimeout(function()$('.successMsg').hide();, 5000);
// Reset form after submission
$(".builderForm")[0].reset();
);
event.preventDefault();
);
);
);
</script>
还有我的 PHP 邮件处理程序代码:
$layers_email_address = '';
$layers_email_subject = '';
// if there are any errors in our errors array, return a success boolean of false
if (!empty($errors))
// if there are items in our errors array, return those errors
$data['success'] = false;
$data['errors'] = $errors;
else
parse_str($_REQUEST['formData'], $formFields)
//$formFields = explode('&', $_REQUEST['formData']);
$html='<html><body>';
foreach($formFields as $key => $value)
$fields = explode('=', $key);
$field = $fields[0];
$value = $fields[1];
$html .= '<p><label>' . $key . ' :</label> ' . $value . '</p>';
$html .='</body></html>';
$to = "sam.skirrow@gmail.com";
$subject = "Form Submission";
$txt = $html;
$headers = "From: <sam.skirrow@gmail.com>". "\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1"."\r\n";
mail($to,$subject,$txt,$headers);
// if there are no errors process our form, then return a message
// show a message of success and provide a true success variable
$data['success'] = true;
$data['message'] = 'Success!';
// return all our data to an AJAX call
echo json_encode($data);
我怎样才能让我的电子邮件以痛苦文本的形式通过,而不是省略特殊字符?
发送多个复选框数据时出现的问题,这里是动态创建复选框的代码(它位于 foreach 语句中,并采用小部件中“select-options”文本区域的每一行来填充每个复选框
if ($item['input_type'] == 'checkbox') ?>
<div class="options_container">
<?php foreach(explode("\n", $item['select_options']) as $select_option) ?>
<input type="checkbox" name="<?php echo $item['input_name']; ?>" value="<?php echo preg_replace('/\s+/','', $select_option); ?>" <?php if( $this->check_and_return( $item, 'required') ) echo 'required'; ?>><span class="checkbox_option"><?php echo $select_option; ?></span>
<?php ?>
</div>
<?php
编辑:php 邮件处理程序的新代码:
$layers_email_address = '';
$layers_email_subject = '';
// if there are any errors in our errors array, return a success boolean of false
if (!empty($errors))
// if there are items in our errors array, return those errors
$data['success'] = false;
$data['errors'] = $errors;
else
parse_str($_REQUEST['formData'], $formFields)
$html = '<html><body>';
foreach ($formFields as $key => $value)
$html .= '<p><label>' . $key . ' :</label> ' . $value . '</p>';
$html .= '</body></html>';
$to = 'sam.skirrow@gmail.com';
$subject = "Form Submission";
$txt = $html;
$headers = "From: <sam.skirrow@gmail.com>" . "\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1" . "\r\n";
mail($to, $subject, $txt, $headers);
// if there are no errors process our form, then return a message
// show a message of success and provide a true success variable
$data['success'] = true;
$data['message'] = 'Success!';
// return all our data to an AJAX call
echo json_encode($data);
【问题讨论】:
【参考方案1】:函数parse_str()
就是你要找的。p>
使用parse_str($_REQUEST['formData'], $formFields)
] 代替$formFields = explode('&', $_REQUEST['formData']);
这将解析您的字符串$_REQUEST['formData']
,以便在变量$formFields
中创建一个包含key => value
的数组。
函数here的文档。
编辑:
对于 foreach 工作,您需要这样做:
foreach ($formFields as $key => $value)
$html .= '<p><label>' . $key . ' :</label> ' . $value . '</p>';
【讨论】:
谢谢,这确实有效 - 但是当我的电子邮件通过时,我现在丢失了 $field - 所以我的电子邮件只是一个结果列表,之前它是 $field : $value - 现在它只是以 $value 的形式出现: 而不是foreach ($formFields as $key)
使用foreach ($formFields as $key => $value)
这样您将获得数组的$key 和$value。
我明白了,但这不起作用,我只得到 $key 而不是 $value - 让我更新我的代码,这样你就可以看到我写的东西 - 很确定这是你的虽然在说
现在没有电子邮件发送 - 我已经更新了我的代码,所以你可以看到我添加了什么
你不需要这行:$fields = explode('=', $key); $field = $fields[0]; $value = $fields[1];
以上是关于PHP电子邮件表单正在通过,单词之间没有空格,也没有特殊字符的主要内容,如果未能解决你的问题,请参考以下文章