Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
  • 締切済み

PHPにてメールフォームで文字化け

今、会社のHP用でメールフォームをphpで作成しています。 「入力」→「確認」→「送信」 でsession関数を使って作成しているのですが確認画面で文字化けしてしまい、送られてくるメールも文字化けしてしまい困っています。 エンコードの間違い?と思って mb_language("ja"); mb_internal_encoding("SJIS"); でやっているのですがこれだけではいけないのでしょうか? 個人で借りているサーバーで試したところうまくいったのですが、会社の借りているサーバーだと文字化けしてしまう状態です。 ちなみに個人で借りているのはロリポップで 会社のサーバーはphp4まで対応しています。 わかりにくい質問ですがよろしくお願いします。

みんなの回答

回答No.3

的外れの回答かもしれませんが、その際はご容赦ください。 会社の借りているサーバーが特定のエンコード(UTF-8など)を指定している場合は、それに従わねばなりません。 また、ファイルの保存もそのエンコードでおこなう必要があります。

すると、全ての回答が全文表示されます。
  • kozaiku
  • ベストアンサー率41% (256/616)
回答No.2

私の少ない経験からですが、 アップロード先サーバによって文字化けの違いが出る場合、PHPファイルがサーバー上にある状態での文字コードの違いが考えられます。 ローカルPCからPHPファイルをアップロードする際にエンコードが変わってしまっているのかもしれません。 FTPソフトによってはホスト側の保存エンコードを明示的に指定できるものもあります(NextFTP)。shift-jisで作成し、shift-jisでアップロードするといった具合に徹底したら文字化けは解消しました。 あくまで経験談ですが・・・

すると、全ての回答が全文表示されます。
回答No.1

メールフォームの際のエンコードは以下について整理する必要があります。 1. スクリプト記載エンコード  エディタで編集する時のエンコードです。LinuxではEUC-JP、WindowsではSJIS等が一般的になっているのではないかと思います。IEでは比較的影響を受けやすい気がします。 2. 出力エンコード  文字出力時のエンコードです。HTML記載時のメタタグ等に指定します。mb_http_outputで検出/指定が可能です。 3. 内部エンコード  内部での文字エンコードです。これはmb_internal_encodingで指定可能です。  4. 外部からのPOST(あるいはGET)文字エンコード  通常は指定しなくても大丈夫だと思いますが、文字化けする時はきちっと指定した方がいいと思います。mb_http_inputで検出可能です。 文字化けする場合は、mb_language("ja");やmb_internal_encoding("SJIS");だけでなく、上記をきちっと設定すれば解決します。確認画面で文字化け、と言う事はメール送信以前の入力時点でうまく言ってないと思います。

すると、全ての回答が全文表示されます。

関連するQ&A