ネットでヒープを検索しましたが、何もコードを作成できません。このように見て電子メールで私の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;
?>
)は、あなたの実際のEUC-JPで記述されたスクリプトではなく、UTF-8のような非互換なものですか? – Synchro
PHPマニュアルを見ると、 'htmlspecialchars()'の3番目の引数がエンコーディングになります。デフォルトはutf-8です。多くの関数/ライブラリがphpのutf-8にデフォルトでない場合は、例fgetcsv、... – frz3993
はい、スクリプトはeuc-jpです。それで引数を入れたら、このように見えるはずですか? (上記参照) – Chris