電子書籍の厳選無料作品が豊富!

環境は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");
で、色々と文字エンコードを変えてみましたが
文字化けしてしまいます。

対処方法をご存じでしたら、
ご教示して頂けたら幸いです。

A 回答 (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');
}

としてみてはいかがでしょう、ということです。
    • good
    • 0
この回答へのお礼

wp_さん、いつもありがとうございます。
お陰様でお馬鹿な私でも
少しずつですが理解を深めることが出来ました。

問題はphp.iniにもあったようです。
そこがutf-8の設定になっていませんでした。

お礼日時:2007/12/20 10:47

No.1の方が言っていることが全てですけども^^;


補足を。
こちらも問題の切り分けをしましょう。

DB->(PHP)
 この取得時点でバイナリが崩れていないか

(PHP)->Client
 HTTPクエリで正しくeucJP-winが指定されているか
// header()で明示的に文字コードを宣言しているか

Client
 <meta>で正しく文字コードを設定しているか
 ClientはeucJP-winで表示できる環境か

また、これらにおいて全て同一の文字コードを扱っているかどうかが肝要です。
崩れていた原因を突き止めた場合に初めて「何故崩れたのか」「対処方法はどうするのか」を検討すると良いです。
おそらくPHP内でEUC-JP→UTF8に変換した上でHTTPに流すと言う方法が(システム全体から見て適切かどうかはさておき)楽な気がします。

この回答への補足

ご返事有り難うございました。

>おそらく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);

補足日時:2007/12/18 09:34
    • good
    • 0

ブラウザはまた別の処置が要ると思うよ


ブラウザは eucJP-win というのは大抵持っていないから?になるんだろうね。

因みにハシゴの高の文字情報を調べるとunicodeでしか出てこないからブラウザへ出力するなら「UTF-8」が妥当になるんじゃないかな。

この回答への補足

ご返事有り難うございました。

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

補足日時:2007/12/17 15:02
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!