2010年1月15日金曜日
PHPでメールを送るけど、Beckyだけが…

PHPでサイト構築しました。
メールを送るんだけど、まぁこんなカンジ。
抜粋ね。

mb_language('ja');
mb_internal_encoding('UTF-8');
$admin_name = mb_encode_mimeheader($admin_name, 'UTF-8');
$mail_header = "From: ".$admin_name." <".$admin_mail.">\r\n";
$mail_header .= "Content-Type: text/plain; charset=ISO-2022-JP\r\n";
$mail_header .= "Content-Transfer-Encoding: 7bit";
mb_send_mail($mail, $subject, $body, $mail_header);


mb_language()とかmb_internal_encoding()とかは冗長かとは思ったんだけど、改めて指定してみた。

問題は$admin_nameなんだな。
要するに送信者名を日本語で設定したいというので、mb_encode_mimeheader()を使うことになった。

色々とテストしてみると、何故かBecky!だけが化ける。
いくつかのケータイとiphone、Windows Live Mailで試したけど、問題なし。
Becky!だけが問題。

受信メールの一覧、メールのプロパティでは正常に表示されている。
しかしメールを表示する際のミドルバー上の差出人とヘッダ表示ではまともに表示できていない。

試しに返信してみると、宛先の日本語表示は正しい。

色々調べるが、有効な情報は見つからない。

まぁ、Becky!はクセがあるみたいだしなぁ…


じゃ、僕のコードがまずいんだろうなってことで、Content-Typeを消してみたり、Content-Transfer-Encodingを消してみたり色々試したが一向に改善されない。

改めてphpinfo()を確認するが、mb_internal_encodingはUTF-8である。


結論はこれ。
$admin_name = mb_encode_mimeheader($admin_name, 'UTF-8');


ここで指定している'UTF-8'を外すと、Becky!でも正常に表示されました。

$admin_name = mb_encode_mimeheader($admin_name);


$admin_nameで指定している文字コードもUTF-8だし、改めて指定する必要もないかな??
一応Windows Live Mailでも正常に受け取れたし…

なんだったんだろう?
全然ワカラン。

実は根本的なことが判ってないのかも。



0 コメント | コメントを書く | コメントの表示
2009年11月5日木曜日
webalizerの画像が文字化けする

調べれば結構出てくるんだけど、僕の場合の対応策をメモっとく。

HTML自体は文字化けしてなくても、画像が文字化けする場合、TrueTypeFontがないかららしい。
なので、とりあえずフォントを探してみる。

OSによって違いがあるかもしれないけど、/usr/share/fonts/あたりを探してみる。

で、どこかにTrueTypeってディレクトリがあると思うので、日本語のTTFのパスをチェックして、webalizerのconfファイルに書く。

TrueTypeFont 日本語TTFのパス

こいつを追記してやればOK。



0 コメント | コメントを書く | コメントの表示
2009年9月18日金曜日
PHPでPOSTの漢字が文字化けっつーか壊れる?

担当しているサイトがボチボチリリースです。

で、社内から文字化けが起きると指摘が。

調べてみると、検索処理のところで漢字を入れると文字化け…というか「??」とかって表示されたり、値そのものが消えてなくなる。

で、かな混じりだと、正常に値が受け取れる。
あれこれ試したり考えたりした結果、に日本語を埋めるというその場しのぎの対応を入れてみた。

仕事が落ち着いたので、Google先生にお伺いを立ててみると、こういうのが出てきた。

[2378] 文字コードの検出に失敗 - PHPの基礎体力掲示板
http://www.sound-uz.jp/php/bbs/thread/2378?view=flat#


どうも、「mbstring.http_input」の設定が悪さしてる可能性があるらしい。
ってことで、お客さんのサーバを確認すると、案の定「auto」になっていた。

XAMPPで実行していたローカル環境はどうかというと、「pass」だった。
じゃ、社内のテストサーバは? と思ったけど、こっちは「auto」で正常に動作してた。
む… テスト環境ではUTF-8で動かしてたのを客先に合わせてEUC-JPに慌てて変換したのがいかんかった?

php.iniの変更をお願いする?
ちょっと難しいなかぁ?
仕方ないから、暫定対応で行くか…
公開は短期間だし、いいよね?



0 コメント | コメントを書く | コメントの表示
Template Design: © 2007 Envy Inc.