2017-12-24 14 views
0

ネットでヒープを検索しましたが、何もコードを作成できません。このように見て電子メールで私のPHPコードの結果:PHPフォームを使用して送信され、日本語のテキストが文字化けして送信されたメール

叹涟:ボブ メッセ〖ジ:銇撱倱銇仭銇

彼らは(日本語の文字で)次のようになります。

名前:ボブ メッセージ:こんいちは

フィールドに英語の文字を入力するときには正常に動作します:

名前:クリス メ

ここにコードがあります。ウェブサイトのページ自体はeuc-jpとしてエンコードされています。電子メールの件名は問題なく表示されます。テキストは私のMacメールアプリと私のアンドロイドデバイス(gmailアプリ、アンドロイドメールアプリ)で文字化けしています。たぶんhtmlspecialchars関数の問題です。私はそれを修正するためにPHPについて十分に知りません。私を助けてください!

<?php 
// Check for empty fields 
if(empty($_POST['name'])  || 
    empty($_POST['email'])  || 
    empty($_POST['message']) || 
    !filter_var($_POST['email'],FILTER_VALIDATE_EMAIL)) 
    { 
    echo "No arguments Provided!"; 
    return false; 
    } 

$name = strip_tags(htmlspecialchars($_POST['name'])); 
$email_address = strip_tags(htmlspecialchars($_POST['email'])); 
$message = strip_tags(htmlspecialchars($_POST['message'])); 


$to = "[email protected]\r\n"; 
$email_subject = "お問い合わせ\r\n"; 
$email_body = "名前: $name<br><br>メッセージ: $message\r\n"; 
$headers = "From: [email protected]\r\n"; 
$headers .= "Reply-To: $email_address\r\n"; 
$headers .= "Content-Type:text/html; charset=euc-jp\r\n"; 
mail($to,'=?euc-jp?B?'.base64_encode($email_subject).'?=',$email_body,$headers); 
return true;    
?> 

更新コード:

<?php 
// Check for empty fields 
if(empty($_POST['name'])  || 
    empty($_POST['email'])  || 
    empty($_POST['message']) || 
    !filter_var($_POST['email'],FILTER_VALIDATE_EMAIL)) 
    { 
    echo "No arguments Provided!"; 
    return false; 
    } 
$name = strip_tags(htmlspecialchars($_POST['name'])); 
$email_address = strip_tags(htmlspecialchars($_POST['email'])); 
$message = strip_tags(htmlspecialchars($_POST['message'])); 
$to = '[email protected]'; 
$email_subject = "お問い合わせ"; 
$email_body = "名前: $name\n\n"."メッセージ: $message"; 
$headers = "From: [email protected]\n"; 
$headers .= "Reply-To: $email_address\n"; 
mail($to,$email_subject,$email_body,$headers); 
return true;    
?> 
+0

)は、あなたの実際のEUC-JPで記述されたスクリプトではなく、UTF-8のような非互換なものですか? – Synchro

+0

PHPマニュアルを見ると、 'htmlspecialchars()'の3番目の引数がエンコーディングになります。デフォルトはutf-8です。多くの関数/ライブラリがphpのutf-8にデフォルトでない場合は、例fgetcsv、... – frz3993

+0

はい、スクリプトはeuc-jpです。それで引数を入れたら、このように見えるはずですか? (上記参照) – Chris

答えて

0

私はなぜ知らないが、あなたのコードは私のために完全に正常に動作します。私が試した :私はあなたがお使いのブラウザやパソコンの言語設定をチェックすることをお勧め

<?php 
$_POST['name']= 'Bob'; 
$name = $_POST['name']; 

$_POST['email']= '[email protected]'; 
$_POST['message']= ' こんいちは'; 
echo $_POST['name']; 

// Check for empty fields 
if(empty($_POST['name'])  || 
empty($_POST['email'])  || 
empty($_POST['message']) || 
!filter_var($_POST['email'],FILTER_VALIDATE_EMAIL)) 
{ 
echo "No arguments Provided!"; 
return false; 
} 
$name = strip_tags(htmlspecialchars($_POST['name'],'EUC-JP')); 
$email_address = strip_tags(htmlspecialchars($_POST['email'])); 
$message = strip_tags(htmlspecialchars($_POST['message'],'EUC-JP')); 
$to = '[email protected]'; 
$email_subject = "お問い合わせ"; 
$email_body = "名前: $name\n\n"."メッセージ: $message"; 
$headers = "From: [email protected]\r\n"; 
$headers .= "Reply-To: $email_address\n"; 
mail($to,$email_subject,$email_body,$headers); 
echo 'email sent'; 
return true; 
?> 

;

+0

それをテストしてくれてありがとう!上のコードを私が現在使っているものに更新しました。ファイルのエンコーディングはUTF-8に設定され、埋め込みページのcharsetはeuc-jpに設定されます。 Mac上のメールアプリでメールを受信して​​も問題ありません。しかし、Androidで表示すると、文字化けしています...これの原因は何ですか? – Chris

+0

また、他のすべての日本の郵便はアンドロイドでうまくいきます。上記のコードを使用して送信されたものだけが文字化けして表示されます。 – Chris

+0

私はAndroid携帯で問題なく同じメールを読むことができます。 –

関連する問題