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.2
- 回答日時:
本文内の半角カナや機種依存文字の処理は大丈夫ですか?
何かしらの制約でphp-i18n版を使えないのでしょうか?
もし、可能であれば「php-3.0.18-i18n-jp2」を使えば、文字コード関連処理の手間がずいぶんと省けますよ。
またはphp4.0.6以降では、i18n系が統合されていますので、php3-i18n版とほぼ同等のi18n関連処理が可能です。
回答有難うございます。
半角カナや機種依存文字でなくても化けてしまうのです。トホホ
(全てDBにインプットしてるのでその文字はわかってます。)
ちなみに何がしか半角カナや機種依存文字をはじく方法というのはあるのでしょうか?
もしありましたら是非お教えください。
HPはレンタルで借りていて、そこにインストールされているものを使うしかなく、
自分でどうにもできません。いわゆる国際化対応バージョンでないので、こうした処理をしています。そのレンタル屋さんに何とか国際化して欲しいのですが…
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.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.5
- 回答日時:
すでに解決されているかもしれませんが・・・。
初めの方がおっしゃっているように、$body 変数の文字コードが統一されていない可能性があります。
$body の文字列を form 入力値から生成する際に、form 入力値などを適切に EUC に変換する必要があるのではないでしょうか?
アドバイス有難うゴザイマス。
何分どしろうとなもので、文字コードが不統一だとか、nkfは自動識別だとか(よく考えれば何も入力に指定しないので当たり前なのですが)、formの文字コードは単純に<META>指定とは限らないだとか、全部意識せず突っ走ってきました、ここでいろいろ初めて知り、勉強になりました。
ホント有難うゴザイマス!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP phpのメールフォームの完了画面でメール受信のコードを書いています。 1 2023/05/31 11:39
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
前後の全角スペースを削除する...
-
ローカル環境で動くのに本番環...
-
phpでfopen()やfputs()が使えない
-
PHPの勉強中の初心者です。
-
PHP(smarty)についての質問(文...
-
CSSの画像をPHPで毎月自動で変...
-
日付と年月日を選択するコード...
-
PHPのWARNINGをcatchするには
-
フォントの色を変えるには?
-
phpでPEAR::DBを使っているので...
-
別ファイルの変数を呼び出した...
-
onedrive にexcelファイルをア...
-
PHPのif文でその処理を途中で抜...
-
バッチを用いたフォルダの自動移動
-
現在位置より2つ上のディレク...
-
CSV出力にHTMLが入ってしまう
-
「クラス関数」「メンバ関数」...
-
phpでメール送信できません 原...
-
one drive のアップロード失敗...
-
さくらサーバーにて、phpからメ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
日付と年月日を選択するコード...
-
htmlのエラーについて(デバッグ)
-
文字コードの出力を変更したい
-
文字化けについて
-
前後の全角スペースを削除する...
-
XAMPP1.7.1上でPHPを実行すると...
-
php エラー
-
パスワード認証ページ作りたい...
-
PHP(smarty)についての質問(文...
-
ここでの ②if($su_d<>"")の比較...
-
phpの画面表示が真っ白です
-
mb_convert_variablesで変換出...
-
どうしたら確認ができますか!?
-
html内のphpスクリプトについて
-
機種依存文字の文字化けについて
-
エラー Warning: Cannot modif...
-
【PHP?】header("location : ...
-
javascriptからphpへ変数
-
ローカル環境で動くのに本番環...
-
PEARのXML/Unserializer.phpが...
おすすめ情報