0

キャラクター セットは私を曲がりくねらせます!

私のデータベースは utf8_general_ci で、その中のテーブルは utf8_unicode_ci です。私のすべてのPHPページには

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

頭の中で。

PHP ページにユーロ記号 (€) を入力してデータベースに入力すると、phpMyAdmin に € として表示されます PHP ページを使用してデータベースからコピーすると、再び € として表示されます</p>

ここまではいいのですが、PHP で HTML メールを書いてみると、何をしても「HTML メールの文字セットを指定してみましたが、うまくいきません。おそらく、メール クライアントがヘッダーではなくメール サーバーから文字セットを取得するためです。アクセント付きの文字などにも問題がありますが、それらはテキストに書き込まれているので、é に é を使用するなどして克服できます。面倒ですが、不可能ではありません。

きっともっと良い方法があります!

私の解決策 (SORT OF)

貢献してくれたすべての人に感謝します。文字セットを utf-8 (メール ヘッダー、html ヘッド、およびその両方) に指定するあらゆる方法を試しましたが、メッセージは依然として iso で届きます。したがって、他の場所から得た情報は正しかったようです。文字セットはサーバーによって定義されます。

固定テキストに é が必要になるたびに é のようなものを入力することで解決しなければなりませんでした。これは面倒ですが、少なくとも機能します。

ユーロ記号については、htmlentities 関数で変数をラップしました。それは機能しますが、同様のファイルで同様の問題が発生した場合は、データベースから取得した他の変数で行うことを忘れないでください。関数を html 本体全体にラップする方が簡単だったでしょうが、それはうまくいきません。

4

3 に答える 3

0

テキスト エディタでエンコーディングを確認します。これが間違っていると、おかしなことが起こる可能性があります。

MySQL については、mysql_set_charsetを参照してください。

電子メールは実際にはContent-Type、電子メール サーバーからではなく、ヘッダーから文字セットを取得します。このヘッダーを などの適切な値に設定してくださいContent-Type: text/html; charset="UTF-8"この質問も参照してください。

また、HTML の場合、HTML の文字エンティティに相当するすべての文字がこれらのエンティティに変換されるように$encoded = htmlentities( $string, ENT_QUOTES, 'utf-8' )を使用できることに注意してください。

于 2013-11-05T18:51:19.337 に答える
0

あなたの正しい答えは、電子メールに utf-8 charset を設定することだと思います。

$headers = "MIME-Version: 1.0\r\n";
$headers.= "From: =?utf-8?b?".base64_encode($from_name)."?= <".$from_a.">\r\n";
$headers.= "Content-Type: text/plain;charset=utf-8\r\n";
$headers.= "Reply-To: $reply\r\n";  
$headers.= "X-Mailer: PHP/" . phpversion();
mail($to, $s, $body, $headers);
于 2013-11-05T18:52:34.080 に答える