私はこのシンプルな問い合わせフォームを持っています例えば、à à à ùòèòòòèà èà à ò
のように、私が送られたメッセージを含んでいます。奇妙なエンコーディングの問題
フォームのみを含むページにフォームを抜粋し、そのページからのメッセージが変更なしで自分のメールに届きました。少し実験したところ、問題の原因は実際には動作させるタグ<meta charset="utf-8">
であることが判明しました。
他のページはユニコード文字を使用しているため、このタグなしでは行けませんが、フォームの出力と競合します。私は何をすべきか?ここで
は、電子メールここ
<?php
//require_once 'Mail.php';
function exit_message($error) {
echo json_encode(array('status' => 'error', 'message' => $error));
exit();
}
$data = $_POST;
// Check that all fields are filled in
$fields = array('name', 'email', 'subject', 'message');
foreach($fields as $field) {
if(empty($data[$field]))
exit_message("Please insert your " . $field . '.');
}
// Check if email is valid
if(!filter_var($data['email'], FILTER_VALIDATE_EMAIL))
exit_message('The email you provided is invalid.');
// Check if message is longer than 9 characters
if(strlen($data['message']) <= 9)
exit_message('Please write a message at least 9 characters long.');
// Begin composing the message
$message = array(
'recipient' => '[email protected]',
'subject' => $data['subject'],
'body' => stripslashes($data['message']) . ' - gabrielecirulli.com',
'headers' => 'From: "' . $data['name'] . '" <' . $data['email'] . '>'
);
// Send
if(mail(
$message['recipient'],
utf8_encode($message['subject']),
utf8_encode($message['body']),
$message['headers']
)) {
echo json_encode(array('status' => 'ok'));
} else {
exit_message('An unidentified error happened while sending your message.');
}
を送ることを担当するPHPスクリプトのコードだ例があります:私は私のページを介してメッセージを送信する場合
http://www.gabrielecirulli.com/p/20120113-073417.png
と<meta charset="utf-8">
を持たないテストページから同じメッセージを送信した場合:
http://www.gabrielecirulli.com/p/20120113-073503.png
ここでの結果です:あなたはメタタグせずにページを見ることができるように
http://www.gabrielecirulli.com/p/20120113-073737.png
は、実際には右の文字を提供します。
この問題は、Google ChromeとFirefoxの両方で発生します。
これはあなたのフォームではなく、あなたのメール送信メカニズムに関するものです。 – bmargulies
いいえ、そうではありません。メタタグなしでページからメッセージを送信すると、正常なメールが返されます。メタタグを追加すると、それらのシンボルが表示されます。 –
何かのエンコーディングを指定する必要があります。テキストを解釈するエンコーディングと、エンコーディングでサーバーにテキストを送信する必要のあるエンコーディングをブラウザに指示するメタ情報を設定する必要があります。同じことが電子メールにも当てはまりますが、電子メールクライアントにメールのエンコーディングを知らせるヘッダーを設定する必要があります。 – deceze