プロが教えるわが家の防犯対策術!

HPでPHP3のmail()を使って利用者にmailを出しているのですが、
かなりの頻度で文字化けしてしまっています。
コンピュータ同士の相性の問題なのでしょうか?
それともプログラムに不備(あるいはこうすれば解消する)
があるのでしょうか。
是非是非とも御教授のほどお願いいたします。
OSはUNIX(Irixv6.5.1)でwebサーバはAppach、phpは4でなく3(そのためnkfでエンコードしてます)、文字コードはEUCでUPしています。

$to="(formで入力された利用者のアドレス)";
$subject="(固定)";
$body="(formで利用者が入力されたものあり)";
$header="Content-Type: Text/Plain;charset=iso-2022-jp\nFrom: office@○○○×××.com\n";
$pp=popen("echo '$subject' | /usr/local/bin/nkf -j","r");
while(!feof($pp)){
$jis_sub=$jis_sub.fgets($pp,1024);
}
$base64_sub=base64_encode($jis_sub);
$mime_sub="=?ISO-2022-JP?B?".$base64_sub."=?=";

$pp=popen("echo '$body' | /usr/local/bin/nkf -j","r");
while(!feof($pp)){
$jis_body=$jis_body.fgets($pp,1024);
}
mail($to,$mime_sub,$jis_body,$header);

A 回答 (5件)

メールの基本はJISではないですか?


EUCでも良いのでしょうか?
    • good
    • 0
この回答へのお礼

EUCをメール用にJISに変換してます。
その過程で上手くいってないことは確かなのですが…
しかし、日本語の文字コードは誰か何とかして欲しいですよね。

お礼日時:2001/11/13 20:09

本文内の半角カナや機種依存文字の処理は大丈夫ですか?



何かしらの制約でphp-i18n版を使えないのでしょうか?

もし、可能であれば「php-3.0.18-i18n-jp2」を使えば、文字コード関連処理の手間がずいぶんと省けますよ。
またはphp4.0.6以降では、i18n系が統合されていますので、php3-i18n版とほぼ同等のi18n関連処理が可能です。
    • good
    • 0
この回答へのお礼

回答有難うございます。

半角カナや機種依存文字でなくても化けてしまうのです。トホホ
(全てDBにインプットしてるのでその文字はわかってます。)
ちなみに何がしか半角カナや機種依存文字をはじく方法というのはあるのでしょうか?
もしありましたら是非お教えください。

HPはレンタルで借りていて、そこにインストールされているものを使うしかなく、
自分でどうにもできません。いわゆる国際化対応バージョンでないので、こうした処理をしています。そのレンタル屋さんに何とか国際化して欲しいのですが…

お礼日時:2001/11/13 20:18

> 半角カナや機種依存文字でなくても化けて


だとすると、これはnkfが入力文字列の漢字コード判定を失敗している可能性はありませんか?
nkfの入力文字をEUCに決め打ち(-Eオプション)にするとどうでしょうか?

送信元<form>ファイルに
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=EUC-JP">
が書かれていれば、ほとんどの場合EUCでpostされるはずです。(たまに例外もあるようです)

レンタル屋さんに「php4.0.6以降にしてくれ」とは言えないんでしょうね、、、
    • good
    • 0
この回答へのお礼

いろいろ有難うございます。
(-Eオプション)で上手く行くような気がします。多分。きっと。
*ちなみに
 $pp=popen("echo '$subject' | /usr/local/bin/nkf -j -E","r");
 でいいんですよね?
 色々Webで調べたのですがよくわからず多分こうだろうと…

とりあえず設置してみて様子をみます!
ホントに有難うございました!

お礼日時:2001/11/15 18:06

> $body="(formで利用者が入力されたものあり)";


とありますので、form からの入力とハードコーディングされた文字列と混在しているのでしょうか?

であれば、複数の文字コードで構成された文字列ということになるでしょうから、nkf では化けると思います。

また、国際化されていない php であれば、下記 URL の jcode.phps がかなり有効ではないでしょうか。
php 4 以上であれば、納得のいく速度だと思います。

ここからはほとんどチャチャですが。。。
あと、selenity さんがおっしゃっていますが、送信される form の内容は form の文字コードで送信される「わけでは」ありません。
ただ、歴史的な経緯でそうなっているだけのようです。
最近では、送信される文字コードは全て UTF-8 にしようという動きもあるそうですので。。。
ただし、現時点ではかなりの確率で form の文字コードで送信されます。

また、php を使用されているのであれば、header 関数を用いて、
header("Content-type: text/html; charset=EUC-JP");
としたほうが、META より効くはずです。

すいません。チャチャでしたね。。。

参考URL:http://www.spencernetwork.org/
    • good
    • 0
この回答へのお礼

ご返事遅れてすみません。
いろいろお教えいただいて有難うゴザイマス。
とりあえずselenity さんに教えていただいた-Eオプションで
様子を見てみます。
header("Content-type: text/html; charset=EUC-JP");
の件やformの文字の送られるコードなど、全然知りませんでした。
めっちゃくちゃ為になりました。有難うゴザイマス!

お礼日時:2001/11/15 18:10

すでに解決されているかもしれませんが・・・。



初めの方がおっしゃっているように、$body 変数の文字コードが統一されていない可能性があります。
$body の文字列を form 入力値から生成する際に、form 入力値などを適切に EUC に変換する必要があるのではないでしょうか?
    • good
    • 0
この回答へのお礼

アドバイス有難うゴザイマス。
何分どしろうとなもので、文字コードが不統一だとか、nkfは自動識別だとか(よく考えれば何も入力に指定しないので当たり前なのですが)、formの文字コードは単純に<META>指定とは限らないだとか、全部意識せず突っ走ってきました、ここでいろいろ初めて知り、勉強になりました。
ホント有難うゴザイマス!

お礼日時:2001/11/15 18:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!