- ベストアンサー
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 共に同値です。)
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 > "マル4→(4) ギリシャ4→IV 郵便番号→〒 株式会社→(株) これらは機種依存文字ですので、使えないのではないかと思います。 PHPユーザーメーリングリストの過去検索を貼り付けておきますので、参考にしてみてください。 ちなみに、下記URLの過去検索をすると、機種依存文字があるかどうかをチェックして、はじく or 変換する、というコトはされてるみたい。 それでは。
その他の回答 (1)
- inu2
- ベストアンサー率33% (1229/3720)
それって、機種依存文字だからでは? このサイトも、ギリシャ数字を入力すると ギリシャ数字4 の場合は IV(アイ ブイ)に ○4 を は (4) に 強制的に変換されますよね それと同じ事しなくちゃなりません mb_convert_encoding() では対応できないはず
お礼
機種依存文字のことは存じています。 Macintosh で表示できないのは納得できるのですが、 Windows で表示できなかったのがどうも納得できなかったのです。 変換をしている Linux では ○4 が扱えないのですね。 >> ○4 → (4) この方法は最終手段として考えておきます。 ありがとうございました。
お礼
ありがとうございます。参考にさせていただきます。
補足
$buffer = "マル4→(4) ギリシャ4→IV 郵便番号→〒 株式会社→(株) \n"; echo mb_convert_encoding($buffer, "utf-8", "eucJP-win, euc-jp"); という形にすることである程度の文字変換に対応できました。 ギリシャ4の小文字→iv には対応できませんでしたが、このようなイレギュラー文字は「教えて!goo」のように代替え文字を利用しようと思います。