DB上に格納した文字列を取得し、PHPで出力すると、
「髙」(はしごだか)等、一部の文字が「□・」のような見た目に化けてしまいます。
環境は以下です。
Linux(CentOS 5)
PHP 5.1.6
Apache 2.2.3
PostgreSQL 8.4.3
文字コードは以下です。
Postgres:EUC-JP
PHPソース:EUC
php.ini の[mbstring]はコメントのまま変更していません。
文字コードの変換を試してみたのですが、「髙」としては出力できませんでした。
Windows上では「CP51932」に変換すると正常に出力できましたが、Linux上ではやはり駄目でした。
mb_language("uni");
mb_internal_encoding("euc-jp");
mb_http_input("auto");
mb_http_output("euc-jp");
$str = "髙橋";
print(mb_convert_encoding($str, "EUCJP-win"));
print(mb_convert_encoding($str, "EUCJP-win","EUC-JP"));
print(mb_convert_encoding($str, "SJIS"));
print(mb_convert_encoding($str, "SJIS","EUC-JP"));
print(mb_convert_encoding($str, "SJIS-win"));
print(mb_convert_encoding($str, "SJIS-win","EUC-JP"));
print(mb_convert_encoding($str, "UTF-8"));
print(mb_convert_encoding($str, "UTF-8","EUC-JP"));
print(mb_convert_encoding($str, "EUC","SJIS"));
print(mb_convert_encoding($str, "Unicode"));
print(mb_convert_encoding($str, "Unicode","EUC-JP"));
print(mb_convert_encoding($str, "UTF-8", "sjis-win"));
print(mb_convert_encoding($str, "CP51932"));
print(mb_convert_encoding($str, "MS932"));
print(mb_convert_encoding($str, "MS932","EUC-JP"));
print(mb_convert_encoding($str, "UTF-8","EUCJP-win"));
print(mb_convert_encoding(mb_convert_encoding($str, "EUCJP-win" ), "UTF-8","EUCJP-win"));
print(mb_convert_encoding(mb_convert_encoding($str, "EUCJP-win","EUC-JP"), "UTF-8","EUCJP-win"));
print(mb_convert_encoding(mb_convert_encoding($str, "SJIS-win" ), "UTF-8","SJIS-win"));
print(mb_convert_encoding(mb_convert_encoding($str, "SJIS-win","EUC-JP"), "UTF-8","SJIS-win"));
print(mb_convert_encoding(mb_convert_encoding($str, "SJIS-win" ), "EUCJP-win","SJIS-win"));
print(mb_convert_encoding(mb_convert_encoding($str, "SJIS-win","EUC-JP"), "EUCJP-win","SJIS-win"));
http://blog.livedoor.jp/loopus/archives/50160285 …
上記サイトによると、解決法は「EUC-JPで出力しないこと」という事でしたが、
文字コードを変換して出力できるような事を書いているサイトもあり、結論が出せずにいます。
ソースを書き換えるのは避けたいのですが、いい方法がありましたらご教示ください。
No.2ベストアンサー
- 回答日時:
>EUC-JPで統一したのにこんな問題があったので・・。
EUC-JPで統一したのであれば、EUC-JPで扱えない文字を格納するのはやめましょう。eucJP-winというのもありますがPostgreSQLはeucJP-ms(NEC選定IBM拡張文字が存在しない)です。
http://msyk.at.webry.info/200511/article_2.html
http://ja.wikipedia.org/wiki/EUC-JP
というか今どき「文字コードを統一」するならutf-8以外の選択肢はないと思うのですが・・・
>他の文字コードにする場合ですが、PHPのソースと、データの文字コードを
>変更するのは簡単なのでしょうか?
PostgreSQLはあまり扱ったことがないのですが、基本的にはソースはテキスト処理系のソフトで一括変換、データベースもエクスポートしてからテーブル設定変更(というか削除して再作成)後にインポートという手順になります。
ご回答有難うございます。
> というか今どき「文字コードを統一」するならutf-8以外の選択肢はないと思うのですが・・・
そうだったんですね。。知識不足でした。
結局、DB、PHPソース共にUTF-8で作り直し、解決しました。
有難うございました。
No.1
- 回答日時:
eucJP-winでも(13区あたりが使えるだけで)「はしごだか」や「たつさき」は含んでいなかったと思います。
(「はしごだか」を扱えない)EUCを使っている以上解決は難しいと思うけど、他の文字セットに変えることはダメなんですか?
ご回答有難うございます。
他の文字セットに変える場合、データとソースを全て修正する必要があるので、できれば避けたいというのが本音です。
また、文字コードについて自分でも調べていますが、この文字コードにすれば間違いなく大丈夫、という確証が得られないでいます。
PHPは初心者で、DBと画面の文字コードを同じにすれば大丈夫という情報があったので、EUC-JPで統一したのにこんな問題があったので・・。
他の文字コードにする場合ですが、PHPのソースと、データの文字コードを変更するのは簡単なのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
高校生はアルバイトするべきだろうか?賛成だったら「賛」、否定だったら「否」を文頭においてあなたの意見を教えてください。
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
ハシゴの「高」が「?」に置き換わってしまいます。
PHP
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
postの文字化け防止について
-
セッションが文字化け、エンコ...
-
10文字以降は非表示にしたいん...
-
PHPのsendmailでの文字化けにつ...
-
PHPスクリプトでエンコードエラー
-
記号だけの文字化け対応について
-
PHP+Postgres 「髙」が文字化け
-
PHPフォームからのメール送信内...
-
mb_regex_encodingでエンコード...
-
SJISで取得した半角カナをUTF-8...
-
送信したメールのタイトルが無...
-
メールのCCに複数のアドレスを...
-
phpMyAdmin内での文字化け
-
mb_detect_encoding()関数について
-
php自動返信メール本文の一部の...
-
VBAのコマンドボタンの文字列の...
-
ソースコードの1行が長いとき...
-
文字の入力で横バー上段、中断...
-
メッセージボックスで1025文字...
-
エスケープ文字の復帰(¥r)と...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
文字化け変換方法
-
UTF8メールがLotus Notesで文字...
-
PHP+Postgres 「髙」が文字化け
-
phpMyAdmin内での文字化け
-
PHPmailerでの添付ファイルの文...
-
SJISで取得した半角カナをUTF-8...
-
SJIS→UTF-8変換後の文字化けに...
-
SQL Serverで文字コードUTF-8
-
PHPのsendmailでの文字化けにつ...
-
mb_strposについて予定外の結果...
-
「あ」→「82A0」のようにshift-...
-
includeファイルの文字コードに...
-
PHPスクリプトでエンコードエラー
-
multipart/form-dataの文字化け
-
mb_send_mailの2重投稿を防止し...
-
IMAP関数で取得した文字列の、...
-
メールのCCに複数のアドレスを...
-
自動返信メールへの画像添付
-
mb_regex_encodingでエンコード...
-
メール題名の文字化け
おすすめ情報