我目前正在开发一个带有Phonegap,PHP和MySQL的混合应用程序项目,该API涉及发送电子邮件和数据填写程序调用将其保存在数据库(MySQL)上,电子邮件还可以但是我在保存MySQL数据方面遇到了问题,我创建了一个带有表单的单个文件来测试API并且工作,我注意到当我使用APP将数据发送到API时,数据带有特殊字符,如@,当我使用表单时,数据来自例如%40(@的ASCII代码),并且过程调用正常。
代码如下,测试代码以及API代码,API版本使用来自APP的JSON发送到PHP的数据。
API版
<?php
Include("dbconect.php"); #DB Connector
if (!empty($_GET)) {
/* Recuperando Dados do GET */
$DestinoEmail = "webmaster@testfab.com"; //Destino para o Email de Notificação
$NomeCompleto = $_GET['Nome'];
$TelefoneFixo = $_GET['TelefoneFixo'];
$TelefoneMovel = $_GET['TelefoneMovel'];
$email = $_GET['Mail'];
$cor = $_GET['CorSelecionada'];
$Rg = $_GET['NumeroRG'];
$cep = $_GET['NumeroCEP'];
$assunto = $_GET['AssuntoEmail'];
$descricao = $_GET['descricaoEmail'];
$mobileID = $_GET['MobileReg'];
$sexo = $_GET['Sex'];
$nCasa = "0";
/* Envia o email notificando */
#Corpo do Email
$msg= "<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<style type='text/css'>
body {
color: #3A6EA5;
}
h5 {
background-color: #3A6EA5;
padding: 10px 30px 10px 30px;
width: 950px;
}
</style>
</head>
<body>
<p> </p>
<p>Prezado $NomeCompleto,</p>
<p>Seu Teste foi encaminhado com sucesso para nossa linha , favor aguarde retorno.</p>
<p> </p>
<p> </p>
</body>
</html>";
# Always set content-type when sending HTML email
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";
$headers .= 'From: <webmaster@testemat.com>' . "\r\n";
$assuntoMail = "Teste de Material";
#Codificar Assunto para aceitar os acentos
$assunto_codificado = sprintf('=?%s?%s?%s?=', 'UTF-8', 'B', base64_encode($assuntoMail));
#Quebra de Linha caso a linha ultrapasse 70 caracteres
$msg = wordwrap($msg,70);
#Envio do Email
mail($DestinoEmail,$assunto_codificado ,$msg,$headers);
/* Executar a Proc para armazenar os dados */
$ncasa = "0";
$sth = $db->prepare('CALL PR_REGISTER_REPORT(?,?,?,?,?,?,?,?,?,?,?,?,@out)');
$sth->bindParam(1, $NomeCompleto, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 12);
$sth->bindParam(2, $TelefoneFixo, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 12);
$sth->bindParam(3, $TelefoneMovel, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 12);
$sth->bindParam(4, $email, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 12);
$sth->bindParam(5, $cor, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 12);
$sth->bindParam(6, $Rg, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 12);
$sth->bindParam(7, $cep, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 12);
$sth->bindParam(8, $ncasa, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 12);
$sth->bindParam(9, $mobileID, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 12);
$sth->bindParam(10, $sexo, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 12);
$sth->bindParam(11, $assunto, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 12);
$sth->bindParam(12, $descricao, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 12);
$sth->execute();
//Retorno OK para o APP
$resultados["validate"] = "ok";
$resultadosJson = json_encode($resultados);
echo $_GET['jsoncallback'] . '(' . $resultadosJson . ');';
}else{
Echo "Interface Somente com APP";
}
?>
测试版本(test-process.php)
<?php
Include("dbconect.php"); #DB Connector
if (!empty($_GET)) {
/* Recuperando Dados do GET */
$DestinoEmail = "webmaster@testfab.com"; //Destino para o Email de Notificação
$NomeCompleto = $_GET['Nome'];
$TelefoneFixo = $_GET['TelefoneFixo'];
$TelefoneMovel = $_GET['TelefoneMovel'];
$email = $_GET['Mail'];
$cor = $_GET['CorSelecionada'];
$Rg = $_GET['NumeroRG'];
$cep = $_GET['NumeroCEP'];
$assunto = $_GET['AssuntoEmail'];
$descricao = $_GET['descricaoEmail'];
$mobileID = $_GET['MobileReg'];
$sexo = $_GET['Sex'];
$nCasa = "0";
/* Envia o email notificando */
#Corpo do Email
$msg= "<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<style type='text/css'>
body {
color: #3A6EA5;
}
h5 {
background-color: #3A6EA5;
padding: 10px 30px 10px 30px;
width: 950px;
}
</style>
</head>
<body>
<p> </p>
<p>Prezado $NomeCompleto,</p>
<p>Seu Teste foi encaminhado com sucesso para nossa linha , favor aguarde retorno.</p>
<p> </p>
<p> </p>
</body>
</html>";
# Always set content-type when sending HTML email
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";
$headers .= 'From: <webmaster@testemat.com>' . "\r\n";
$assuntoMail = "Teste de Material";
#Codificar Assunto para aceitar os acentos
$assunto_codificado = sprintf('=?%s?%s?%s?=', 'UTF-8', 'B', base64_encode($assuntoMail));
#Quebra de Linha caso a linha ultrapasse 70 caracteres
$msg = wordwrap($msg,70);
#Envio do Email
mail($DestinoEmail,$assunto_codificado ,$msg,$headers);
/* Executar a Proc para armazenar os dados */
$ncasa = "0";
$sth = $db->prepare('CALL PR_REGISTER_REPORT(?,?,?,?,?,?,?,?,?,?,?,?,@out)');
$sth->bindParam(1, $NomeCompleto, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 12);
$sth->bindParam(2, $TelefoneFixo, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 12);
$sth->bindParam(3, $TelefoneMovel, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 12);
$sth->bindParam(4, $email, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 12);
$sth->bindParam(5, $cor, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 12);
$sth->bindParam(6, $Rg, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 12);
$sth->bindParam(7, $cep, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 12);
$sth->bindParam(8, $ncasa, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 12);
$sth->bindParam(9, $mobileID, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 12);
$sth->bindParam(10, $sexo, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 12);
$sth->bindParam(11, $assunto, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 12);
$sth->bindParam(12, $descricao, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 12);
$sth->execute();
//Retorno OK para o APP
$resultados["validate"] = "ok";
$resultadosJson = json_encode($resultados);
echo $_GET['jsoncallback'] . '(' . $resultadosJson . ');';
}else{
echo"
<form action='test-process.php' method='get'>
Nome Completo:<br>
<input type='text' name='Nome' value=''><br>
Telefone Fixo:<br>
<input type='text' name='TelefoneFixo' value=''><br>
Telefone Movel:<br>
<input type='text' name='TelefoneMovel' value=''><br>
Email:<br>
<input type='text' name='Mail' value=''><br>
Cor:<br>
<input type='text' name='CorSelecionada' value=''><br>
NumeroRG:<br>
<input type='text' name='NumeroRG' value=''><br>
NumeroCEP:<br>
<input type='text' name='NumeroCEP' value=''><br>
AssuntoEmail:<br>
<input type='text' name='AssuntoEmail' value=''><br>
DescricaoEmail:<br>
<input type='text' name='descricaoEmail' value=''><br>
MobileReg:<br>
<input type='text' name='MobileReg' value=''><br>
Sex:<br>
<input type='text' name='Sex' value=''><br>
<input type='submit' value='Submit'>
</form>";
}
?>
有什么建议吗?
已经尝试强制使用utf8_encode($ foo); 还没有工作=(