开发者

Form encoding problem in different browsers

I'm trying to create and submit a form for a website and send a mail after all fields are submitted. The data is submitted through ajax calls.

The problem is that my site users work in UTF-8 and if I submit the form with Internet Explorer the info (from the form) is not sent in UTF-8 unless i do utf8_encode(). But if i send the email using the ut8_encode function Firefox and Chrome stops working...

Some notes: - The php file containing the form has header in UTF-8 - meta-tag UTF-8 - In the ajax.php (file where the form is submitted) also has header in UTF-8 - Email headers are received in UTF-8 charset (independent of the browser)

Code: ajax.php

$email = $_REQUEST['email'];
$phone = $_REQUEST['phone'];
$reply = $_REQUEST['reply'];

$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
$headers .= 'From: '.$email . "\r\n" .
'X-Mailer: PHP/' . phpversion();

$topic = 'subject';
$message = '<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
<body style="font-size:11px; font-family:Verdana, sans-serif; line-height:17px;">
    <h1 style="color:#255670; font-size:16px; font-family: \'Trebuchet MS\', sans-serif; text-transform:uppercase;">Quizz</h1>
    <div style="background-color:#EFEFEF; padding:10px;">
        Nome: <b>'.$name.'</b><br />
        Telefone: <b>'.$phone.'</b><br />
        E-mail: <a href="mailto: '.$email.'"><b>'.$email.'</b></a><br />
    </div>
    <div style="border-top:1px dashed #8CD3D7; padding:5px; margin:10px 0px 0px 0px;">
        <p>'.$reply.'</p>
    </div>
</body></html>';

$sendMail = mail($adminMail, $topic, $message, $headers);

index.php (form)

<form method="GET" enctype="text/plain" accept-charset="utf-8">
<div class="banner-subtitle">Resposta:</div>
<textarea name="reply" id="quizz-reply" style="width:255px;"></textarea>
<div class="banner-subtitle">%NAME%:</div>
<input type="text" id="quizz-name" class="required" name="name" style="width:255px;"/>

<div class="banner-subtitle">%PHONE%:</div>
<input type="text" id="quizz-phone" class="required" name="name" style="width:255px;"/>
<div cla开发者_如何学JAVAss="banner-subtitle">%EMAIL%:</div>
<input type="text" id="quizz-email" class="required" name="email" style="width:255px;"/>
<div class="banner-subtitle">%SECURITY_CODE%:</div>
<img style="float:left; margin-right:10px" src="ajax.php?action=generateCaptcha&width=80&height=20&cell=security_code2"/><input type="text" id="quizz-security-code" class="required" name="security_code2" style="width:80px; float:left"/>
<input type="button" value="%SUBMIT%" onclick="sendOpinion()" style="margin-top: 1px"/>
</form>

Ajax Request

$.ajax({
                    url:'ajax.php?action=sendOpinion&name='+name+'&email='+email+'&phone='+phone+'&passport='+passport+'&reply='+reply,
                    success: function(data)
                    {
                            //alert(data);
                            $('#quizz-name').val('');
                            $('#quizz-email').val('');
                            $('#quizz-phone').val('');
                            $('#quizz-passport').val('');
                            $('#quizz-reply').val('');
                    }
                });

Can anyone please help? I can't understand what I'm doing wrong...


Declare the encoding of your website; add this in your <head> tag:

<meta http-equiv="content-type" content="text/html;charset=UTF-8" />

BTW you should escape your variables, even in emails:

Nome: <b>'.htmlspecialchars($name, ENT_QUOTES, 'UTF-8').'</b><br />

And in URLs too:

url:'ajax.php?action=sendOpinion&name='+encodeURIComponent(name)+'...
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜