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);
No.5
- 回答日時:
すでに解決されているかもしれませんが・・・。
初めの方がおっしゃっているように、$body 変数の文字コードが統一されていない可能性があります。
$body の文字列を form 入力値から生成する際に、form 入力値などを適切に EUC に変換する必要があるのではないでしょうか?
アドバイス有難うゴザイマス。
何分どしろうとなもので、文字コードが不統一だとか、nkfは自動識別だとか(よく考えれば何も入力に指定しないので当たり前なのですが)、formの文字コードは単純に<META>指定とは限らないだとか、全部意識せず突っ走ってきました、ここでいろいろ初めて知り、勉強になりました。
ホント有難うゴザイマス!
No.4
- 回答日時:
> $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/
ご返事遅れてすみません。
いろいろお教えいただいて有難うゴザイマス。
とりあえずselenity さんに教えていただいた-Eオプションで
様子を見てみます。
header("Content-type: text/html; charset=EUC-JP");
の件やformの文字の送られるコードなど、全然知りませんでした。
めっちゃくちゃ為になりました。有難うゴザイマス!
No.3ベストアンサー
- 回答日時:
> 半角カナや機種依存文字でなくても化けて
だとすると、これはnkfが入力文字列の漢字コード判定を失敗している可能性はありませんか?
nkfの入力文字をEUCに決め打ち(-Eオプション)にするとどうでしょうか?
送信元<form>ファイルに
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=EUC-JP">
が書かれていれば、ほとんどの場合EUCでpostされるはずです。(たまに例外もあるようです)
レンタル屋さんに「php4.0.6以降にしてくれ」とは言えないんでしょうね、、、
いろいろ有難うございます。
(-Eオプション)で上手く行くような気がします。多分。きっと。
*ちなみに
$pp=popen("echo '$subject' | /usr/local/bin/nkf -j -E","r");
でいいんですよね?
色々Webで調べたのですがよくわからず多分こうだろうと…
とりあえず設置してみて様子をみます!
ホントに有難うございました!
No.2
- 回答日時:
本文内の半角カナや機種依存文字の処理は大丈夫ですか?
何かしらの制約でphp-i18n版を使えないのでしょうか?
もし、可能であれば「php-3.0.18-i18n-jp2」を使えば、文字コード関連処理の手間がずいぶんと省けますよ。
またはphp4.0.6以降では、i18n系が統合されていますので、php3-i18n版とほぼ同等のi18n関連処理が可能です。
回答有難うございます。
半角カナや機種依存文字でなくても化けてしまうのです。トホホ
(全てDBにインプットしてるのでその文字はわかってます。)
ちなみに何がしか半角カナや機種依存文字をはじく方法というのはあるのでしょうか?
もしありましたら是非お教えください。
HPはレンタルで借りていて、そこにインストールされているものを使うしかなく、
自分でどうにもできません。いわゆる国際化対応バージョンでないので、こうした処理をしています。そのレンタル屋さんに何とか国際化して欲しいのですが…
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHP 文字化けの解決策。
-
CFileDialogの最初のディレクト...
-
GDへ値を渡す方法は?
-
onedrive にexcelファイルをア...
-
データ送信をボタンを押さずに...
-
10MB以内のJPG画像
-
PHPパーミッションについて
-
youtubeに音声のみのmp4ファイ...
-
.phpファイルが、表示されない
-
画像リストを作りたい
-
phpのPDOの導入
-
PHPから別なPHPへ移動(?)する方法
-
PHPでメールを受信するには?
-
セッションのクッキー有効期間...
-
SEO 動的・静的ページの説明に...
-
【PHP】フレームワークを習得す...
-
違法アップロードについて
-
ssiをhtmlで動作させる為、htac...
-
PHPでSMTPを使ってメール送信で...
-
phpスクリプトのみで定期実行
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
日付と年月日を選択するコード...
-
複数の文字列をファイルに書き...
-
前後の全角スペースを削除する...
-
XAMPP1.7.1上でPHPを実行すると...
-
文字化けについて
-
PHP(smarty)についての質問(文...
-
ファイルをアップロードすると...
-
php エラー
-
条件によってmeta http-equiv="...
-
ウィンドウA⇒ウィンドウB⇒ウィ...
-
html内のphpスクリプトについて
-
Wordpressを利用したソート機能...
-
エラー Warning: Cannot modif...
-
phpの画面表示が真っ白です
-
<form action="bbs.php" method...
-
mb_convert_variablesで変換出...
-
phpでfopen()やfputs()が使えない
-
XMLパースエラー回避方法
-
header関数について
-
PEARのXML/Unserializer.phpが...
おすすめ情報