• 締切済み

PHPのコードをUTF-8に変換したい。

なんとかメールフォーム設置までこぎ着けたのですが、届いたメールが文字化けしてしまいます。HTMLの文字コードがUTF-8、PHPの文字コードがshift-jisなので原因はそこだと考えたのですがPHP内のshift-jis表記をUTF-8に変えるとPHP内で文字化けが起こってしまいます。 MultiTextConverterなどのアプリケーションを使っても同様の文字化けが起こります。 どうすればいいのか分かりません。 よろしくお願いします。

  • yaoo
  • お礼率58% (35/60)
  • PHP
  • 回答数3
  • ありがとう数0

みんなの回答

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.3

フォームからはutf-8でPOSTされてくるのですよね?それをSJISのスクリプトでそのまま扱えば、メール送信云々以前に「画面に表示させる」だけでも文字化けすると思いますが、そういう状態ではありませんか? スクリプトをutf-8で保存し直して、Shift_JISなどの表記がある部分を全部utf-8に書き替えた上で (画面出力対策) header('Content-type: text/html; charset=utf-8'); (メール用) mb_language('ja'); mb_internal_encoding('utf-8'); の記述をしてください。 なお、「utf-8で保存」するのはエディタで保存する文字セットを指定するだけですが、間違っても「BOM付きのutf-8」で保存しないように(WIndowsのメモ帳だとBOMが必ず付加されるので注意)。

回答No.2

漠然とした質問で正解は答えることが出来ませぬ。 もう少し問題の切り分けをしましょう。 全ての文字が化けるのですか?特殊文字だけ化けるのですか? PHPのコードをUTF-8に変換すれば治ると思ったのは何故ですか?

  • junpecho
  • ベストアンサー率9% (1/11)
回答No.1

メールのヘッダーでちゃんと文字コード指定していないんじゃないかと予想します。 情報すくないので断言できないですが、 ここらへんとか参考にならんですか? http://www.php-labo.net/tutorial/php/mail.html

関連するQ&A

  • UTF-8 コードでのmailtoの文字化け

    HPをつくったのですが、(HTMLのエンコードはUTF-8です。) mailtoにsubjectを追記してメールフォームを作成しました。ですが、件名のところがどうしても文字化けしてしまうので、文字をエンコードしたものを貼り付けて何とか対応しました。しかし、ウィンドウズXPまでの古いブラウザでは大丈夫なものの、VISTAでは文字化けしてしまうようです。 どうしてこうなってしまうのでしょうか?outlookなどのバージョンの問題なのでしょうか?それともOS? わかりません。理由をご存知の方、また解決策をご存知の方、どうぞ教えてください。 あと、こんなこと問題外といわれるかもしれませんが、UTF-8を単純にShift-JISに置換したのですが、レイアウトとうすべてがぐちゃぐちゃになってしまいました。たくさんのページをUTF-8からShift-JISに変換しても良い方法というのはないのでしょうか?この点も併せて回答お願いいたします。

    • ベストアンサー
    • HTML
  • PHPの文字コード変換について

    PHPで mb_convert_encodingを用いて UTF-8で記述されたPHPスクリプトファイルの PHPファイル内の任意の文字列の文字コードを変換する場合、 $value = "文字列"; $str = mb_convert_encoding($value ,"UTF8","UTF8"); print $str; この場合、特に問題なく、変換がおこなわれます というか、意味のないで処理ではありますが。 次に $str = mb_convert_encoding($value,"EUC-JP","EUC-JP"); とした場合 うまく文字列の文字コードの変換がおこなわれず 出力内容は文字化けします。 次に $str = mb_convert_encoding($value,"SJIS","SJIS"); とした場合 EUC-JPと同じく文字コード変換に失敗し 文字化けするだろうとおもいましたが おもいのほかブラウザの文字コードUTF-8のままで文字化けしていないのです。 これはどういう現象でしょうか? たとえば一つ目は UTF8で記述されたPHPファイルの文字列をそのままUTF-8として 変換されせるのですから、問題ないはずです。結果問題ありません。 二つ目は UTF-8でかかれたPHPファイルの文字列をEUC-JPでかかれたファイルとして EUC-JPという文字コードに変換しなさいという命令ですよね? これは思う通りにいかなくて文字化けした文字列が出力されるのはわかるのですが 三つ目はUTF8で記述された文字列をSHIFT-JISとしてSHIFT-JISに変換しようとしているにも かかわらず、結果問題なくブラウザのUTF-8で文字列と表示されてしまいます。 これはいったいどういう事なのでしょうか? これが仮に $str = mb_convert_encoding($value,"SJIS","UTF-8"); なら話は簡単んです。 UTF-8で記述されたファイルの任意の文字列を UTF8からSJISに変換しようとしているのですから問題なく SHIFT-JISでエンコーディングされた文字列が帰ってくるはずです。 こ乃原因をご存知のかたよろしくご教授ください。 お願い致します。

    • ベストアンサー
    • PHP
  • 文字コードsjisをUTF8に書き換えたい

    CGIの勉強中の者です。 文字コードはSJISで保存しているCGIをUTF8コードに換えるには何が必要でしょうか? HTMLならmeta内をSJISからUTF8に変更し、TeraPadなどのテキストエディタでUTF8に保存すればオッケーなんですが。 CGIの場合はHTMLと違って、換えるには複雑なのでしょうか? CGIプログラムの中では以下の「sjis」を「UTF8」に書き換えし、UTF8で保存しましたけど、文字化けが出てます。 <meta http-equiv="Content-Type" content="text/html;charset=shift_jis"> &jcode'h2z_sjis(*contenido) &jcode'convert(*subject,'sjis'); &jcode'convert(*infor,'sjis'); &jcode'convert(*contenido,'jis'); &jcode'convert(*res_msg,'jis'); print "Content-type: text/html;charset=shift_jis\n\n"; 宜しくお願いします。

    • 締切済み
    • CGI
  • PHP MySQL 文字コード変換

    初心者です。 いままで特に何も考えずにShiftJisでつくってきたサイトがあるのですが、UTF-8にすべきとご指摘をいただき、直したいのですが、どこをどう変えてよいのかわかりません。 いままで文字コードを指定してきたところといえば、DBに接続する際の $rs = mysql_query("SET character set SJIS", $db); とか、HTMLタグの、 <meta http-equiv="Content-Type" content="text/html; charset=shift_jis" /> とか、CSSの @charset "Shift_JIS"; と、この程度です。 これらを単純に全てUTF-8に統一するだけでOKなのでしょうか? テーブルを作成するときにも文字コードを指定したり、PHPのiniファイルやMySQLのどこかも設定が必要なのでしょうか? ちなみに、ユーザーが入力した情報をテーブルに保存し、それを別のユーザーが検索して閲覧できるようなサイトを作っており、ローカル環境下ではいまのところ文字化けに遭遇したことはありません。 稚拙な質問ですみませんがよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 文字コードがUTF-8のサイトにshift_jisの入力フォームを組み込んだのですが、、

    教えて下さい。 同じような質問があったのですが、解決しなかったのでお聞きしたいのですが、現在、文字コードがUTF-8のサイトに、配布されていたcgiを使い、入力フォームを作っているのですが、こちらは文字コードが shift_jisになっています。なので、そのページだけshift_jisでもいいかなと思い、本体に使っているcssをそのまま使おうとしたところ、CSSの文字コードがUTF-8になっており、多少フォントの指定が入っていまして、これを読み込むとIEでおかしなことになってしまいました。こういった場合やはりフォントの指定をはずした方がよいのでしょうか? 後、CSSでUTF-8でフォントファミリーの指定をしていた場合、HTMLファイルの方がshift_jisになっているとやはりフォントはでないのでしょうか? 分かりずらいですが、宜しくお願いします。

  • UTF-8のphpにshift_jisの埋め込み

    shift_jisのcgiを使っています。 shift_jisはもぉ古いとは承知しておりますが、UTF-8への変換が困難なため shift_jisのままで使おうと思っています。 今までは、shift_jisのcgiの結果を一旦 htmlに書きだしたページを、phpファイル内に iframe を使って埋め込みをしておりましたが、 <?php include("http://******.com/hps/*****.cgi?cmd=s&sc=***"); ?> などで、埋め込みが出来ないものかと思案中です。 埋め込み事態は出来ますが、やはり文字化けします。 何か良い方法はないでしょうか。 また、shift_jisの今後は何年後かに使えなくなるとかありますでしょうか。 どうぞよろしくお願いします。

    • ベストアンサー
    • PHP
  • HTML文字コード

    こんにちは。 文字コードのお話です。 PHPでテンプレートを呼び出して表示するのですが、UTF-8で指定しているのに、Shift-Jisで出力されている様子です。 HTMLのmetaタグで宣言しているのに、HTMLファイルだけがS-JISです。 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> PHP側ではUTF-8を指定していて、そのページではきれいに表示されている文字と、文字化けしている文字がごちゃごちゃです。 htaccessの設定という可能性もあるでしょうか? HTMLに関連する問題だと思うのですが、ご存じの方いらっしゃいましたらご教授お願いします。。

    • 締切済み
    • PHP
  • PHPの文字コードについて

    PHPとmysqlの文字コードの関係について 1.データベースは文字コード utf8_unicode_ci で作成しています。 2.以下のようにテーブルを作成しました。 CREATE TABLE `test` ( `qid` varchar(10) NOT NULL, `qtitle` varchar(255) default NULL, PRIMARY KEY (`qid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 3.show.phpの中で以下のように 出力しようとすると文字化けします。 show.phpファイルは文字コードutf8で保存しています。 <?php print($qTitle); ?> ブラウザの文字コードの設定はShift-Jisです。 ブラウザの文字コードを変えずに正しく表示させるためには どうすればいいのですか? ご教授よろしくおねがいします。

    • 締切済み
    • PHP
  • phpの文字コードをシフトJISに変換する

     SSIを利用して、PHPプログラムをHTMLページの中央部に呼び出して表示しようとしています。  それ自体は単純なことですが、HTMLページの文字コードはシフトJISで、PHPの文字コードはEUCと、異なるため、どうしても文字化けが起きてしまいます。  これを解消する方法はありますか。  PHPの出力文字コードをシフトJISにするのが一番単純かとも思いますが、他の方法も含め、なにかよい方法がありましたら教えてください。

  • PHPの文字コードについてお願いします。

    Apache2、MYSQL、PHP5を使用して勉強しているものですが、文字コードについて質問させてください。 まず、参考書を読みながらphp.iniをこの用に設定しました。 output_handler =mb_output_handler default_charset = "Shift_Jis" extension_dir = "c:\php\ext\" extension=php_mbstring.dll extension=php_mysql.dll mbstring.language = Japanese mbstring.internal_encoding = EUC-JP mbstring.http_input = auto mbstring.http_output = EUC-JP mbstring.encoding_translation = On mbstring.detect_order = auto mbstring.substitute_character = none; MySQLの文字コードはウィザードでUJISに設定して勉強しています。 Apache2の設定は本で支持が無かったのでとくに設定はしていません。 しかしこれでは文字化けが起こったりしてしまい、Googleなどで調べたらUTF-8で統一するのが良いと書かれていたのですが、どのように変更すればわからないです。私の購入した本では「mbstring.detect_order = auto」の意味などが書いて無くて、ただ丸写しの状態になってしまい設定方法が身についていません。なので今回の質問で、文字コードの設定を覚えておきたいのです。 1.UTF-8などの文字コードに変える場合は、Apache2の設定を変える必要があるのでしょうか。 2.上記したphp.iniの設定はどのような意味があるのでしょうか?SHIFT-JISでPHPを書くということでしょうか? できれば各自の良い設定方法を教えてください。 3.たとえばSHIF-JISで書いたPHPファイルを保存するときはSHIFT-JIS形式で保存するのでしょうか? 4.なぜphpはSHIFT-JISで書いているのにMySQLではUJISの文字コードを使用するのでしょうか。統一した方がいいのでは? 5.utf-8に文字コードを変える場合は、php.iniのどの部分を設定し直せばいいのでしょうか? 一つでも回答して頂けるととても嬉しいです。よろしくお願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう