• ベストアンサー

ハシゴの「高」が「?」に置き換わってしまいます。  その2

環境はxp、apache2、php5、Postgresql8.2です。 1台のPCをサーバ&クライアントにしています。 ただ今PHPとPostgresqlの勉強をしています。 先日、 ハシゴの「高」が「?」に置き換わってしまいます。 http://oshiete1.goo.ne.jp/qa3588767.html という質問をさせて頂いた者です。 ご指導をして頂いたおかげで CSV→(PHP)→PostgreSqlでは文字化けせずに表示する事が出来ました。 >$line[0] = mb_convert_encoding($line[0],"eucJP-win","sjis-win"); 今度はそのデータを画面に表示させようとすると、 (PostgreSql→(PHP)→画面表示) ハシゴの「高」などの文字が「?」に置き換わってしまいます。 >print("<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=\"eucJP-win\">\n"); で、色々と文字エンコードを変えてみましたが 文字化けしてしまいます。 対処方法をご存じでしたら、 ご教示して頂けたら幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • wp_
  • ベストアンサー率54% (132/242)
回答No.3

>$sql = "inser t into m_syain (syain) values ('{$line[0]}')"; >pg_query($d_base,$sql); あ、いやutf8にするのはclientへ出力するときの話です^^; $sql="select ほにゃらら"; $res = pg_query($sql); while($row = pg_fetch_assoc($res)) {  echo $row['syain']; // <-ここでハシゴ高が化ける } pg_close($pid); と言う話だと当方は解釈していたのですが、間違いないでしょうか^^; 正常に格納されているハシゴ高がeucJP-winとすると、出力される際に header('content-type:text/html;charset="UTF-8";'); echo "<meta http-equiv='content-type' content='text/html;charset=\"UTF-8\"' />"; (snip...) while($row = pg_fetch_assoc($res)) {  echo mb_convert_encoding($row['syain'],'UTF-8','eucJP-win'); } としてみてはいかがでしょう、ということです。

wee
質問者

お礼

wp_さん、いつもありがとうございます。 お陰様でお馬鹿な私でも 少しずつですが理解を深めることが出来ました。 問題はphp.iniにもあったようです。 そこがutf-8の設定になっていませんでした。

その他の回答 (2)

  • wp_
  • ベストアンサー率54% (132/242)
回答No.2

No.1の方が言っていることが全てですけども^^; 補足を。 こちらも問題の切り分けをしましょう。 DB->(PHP)  この取得時点でバイナリが崩れていないか (PHP)->Client  HTTPクエリで正しくeucJP-winが指定されているか // header()で明示的に文字コードを宣言しているか Client  <meta>で正しく文字コードを設定しているか  ClientはeucJP-winで表示できる環境か また、これらにおいて全て同一の文字コードを扱っているかどうかが肝要です。 崩れていた原因を突き止めた場合に初めて「何故崩れたのか」「対処方法はどうするのか」を検討すると良いです。 おそらくPHP内でEUC-JP→UTF8に変換した上でHTTPに流すと言う方法が(システム全体から見て適切かどうかはさておき)楽な気がします。

wee
質問者

補足

ご返事有り難うございました。 >おそらくPHP内でEUC-JP→UTF8に変換した上でHTTPに流すと言う方法が(システム全体から >見て適切かどうかはさておき)楽な気がします。 と、ご指導して頂きましたので $line[0] = mb_convert_encoding($line[0],"EUC-JP","sjis-win"); $line[0] = mb_convert_encoding($line[0],"utf-8","EUC-JP"); というように変換してみました。 ところが、 $line[0] = mb_convert_encoding($line[0],"utf-8","EUC-JP"); で、SQLを実行すると、エラーになってしまうようです。 このような変換方法ではないのでしょうか? $sql = "insert into m_syain (syain) values ('{$line[0]}')"; pg_query($d_base,$sql);

  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1

ブラウザはまた別の処置が要ると思うよ ブラウザは eucJP-win というのは大抵持っていないから?になるんだろうね。 因みにハシゴの高の文字情報を調べるとunicodeでしか出てこないからブラウザへ出力するなら「UTF-8」が妥当になるんじゃないかな。

wee
質問者

補足

ご返事有り難うございました。 print("<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=\"UTF-8\">\n"); と、してみましたが、 同じ文字化けになってしまいました。。。

関連するQ&A