• ベストアンサー

mb_convert_encoding で 一部の文字が変換できない。

こんにちは、初めて質問させていただきます。 PHPでテキストファイルに保存されたEUC-JPの文字列情報を UTF-8で表示しようとしています。 第一水準、第二水準程度の日本語は問題なく変換ができてるのですが、 「(7)」や「VII」などの特殊な記号文字が変換できないようです。 これは mb_convert_encoding の仕様なのでしょうか? ご存知でしたらご教授お願いいたします。 【ソース】 $buffer = "マル4→(4) ギリシャ4→IV 郵便番号→〒 株式会社→(株) \n"; echo mb_convert_encoding($buffer, "utf-8", "euc-jp"); 【出力結果】 マル4→? ギリシャ4→? 郵便番号→〒 株式会社→? 【環境情報】 Linux (OS、バージョン詳しくは分かりません。) PHP Version 4.3.9 mbstring.detect_order      no value mbstring.encoding_translation  Off mbstring.func_overload      0 mbstring.http_input       pass mbstring.http_output       pass mbstring.internal_encoding    EUC-JP mbstring.language        Japanese mbstring.script_encoding     no value mbstring.substitute_character  no value (Local Value、Master Value 共に同値です。)

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

  • ベストアンサー
  • hiro823
  • ベストアンサー率25% (74/285)
回答No.2

こんにちは。 > "マル4→(4) ギリシャ4→IV 郵便番号→〒 株式会社→(株) これらは機種依存文字ですので、使えないのではないかと思います。 PHPユーザーメーリングリストの過去検索を貼り付けておきますので、参考にしてみてください。 ちなみに、下記URLの過去検索をすると、機種依存文字があるかどうかをチェックして、はじく or 変換する、というコトはされてるみたい。 それでは。

参考URL:
http://ns1.php.gr.jp/mailman/namazu.cgi?idxname=php-users
bluesbrs21
質問者

お礼

ありがとうございます。参考にさせていただきます。

bluesbrs21
質問者

補足

$buffer = "マル4→(4) ギリシャ4→IV 郵便番号→〒 株式会社→(株) \n"; echo mb_convert_encoding($buffer, "utf-8", "eucJP-win, euc-jp"); という形にすることである程度の文字変換に対応できました。 ギリシャ4の小文字→iv には対応できませんでしたが、このようなイレギュラー文字は「教えて!goo」のように代替え文字を利用しようと思います。 

その他の回答 (1)

  • inu2
  • ベストアンサー率33% (1229/3720)
回答No.1

それって、機種依存文字だからでは? このサイトも、ギリシャ数字を入力すると ギリシャ数字4 の場合は IV(アイ ブイ)に ○4 を は (4) に 強制的に変換されますよね それと同じ事しなくちゃなりません mb_convert_encoding() では対応できないはず

bluesbrs21
質問者

お礼

機種依存文字のことは存じています。 Macintosh で表示できないのは納得できるのですが、 Windows で表示できなかったのがどうも納得できなかったのです。 変換をしている Linux では ○4 が扱えないのですね。 >> ○4 → (4) この方法は最終手段として考えておきます。 ありがとうございました。