• ベストアンサー

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 共に同値です。)

  • PHP
  • 回答数2
  • ありがとう数3

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

  • ベストアンサー
  • 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) この方法は最終手段として考えておきます。 ありがとうございました。

関連するQ&A

  • mb_convert_encoding で?になる。

    $old = "名前"; $new = mb_convert_encoding($old,"EUC-JP","auto"); echo "$new"; 上のスクリプトを実行すると、’名前’が半角の’?’に なるんですよー。 何ででしょうか? ページもEUC-JPだし、phpもEUCです。 PHP Version 4.3.10で、php.iniの mbstring.internal_encodingはEUC-JPです。 OSは、テストなので自分のPCのw2kです。 mb_convert_encodingが実験的だからなのでしょうか? 他にも同じようになる物があるのでしょうか? 対処方法はあるのでしょうか?

    • ベストアンサー
    • PHP
  • mb_convert_encoding() エラー

    http://www18.tok2.com/home/koumori27/xml/pxml/pxml2.htmlのxmlpaser_sample1.php3を自分のパソコンで試したら、Fatal error: Call to undefined function: mb_convert_encoding() in c:\php\xmlpaser_sample1.php on line 99と出ました。 http://www.php.net/manual/ja/ref.mbstring.php#ini.mbstring.languageに書いてある 例 1. php.ini 設定の例 mbstring.language = Japanese; mbstring.internal_encoding = UTF-8 ; mbstring.encoding_translation = On mbstring.http_input = auto ; mbstring.http_output = UTF-8 ; mbstring.detect_order = auto ; mbstring.substitute_character = none ; と http://oshiete1.goo.ne.jp/kotaeru.php3?q=293266 に書いてある方法を試しましたが Fatal error: Call to undefined function: mb_convert_encoding() in c:\php\xmlpaser_sample1.php on line 99 が直りません。 どうすれば直るのでしょうか?

    • ベストアンサー
    • PHP
  • 【PHP】mb_convert_encoding()で "~" 等が化ける

    PHP5.2.4 使用者です。(レンタルサーバー) 例えば、サーバー及び記述の文字コードがEUC-JPだとして、 $str = "~"; $str = mb_convert_encoding($str , 'UTF-8', 'EUC-JP'); とすると "?" に化けてしまいます。 調べたところ、マルチバイト文字の ~ ¬ ∥ - ¢ £ \ は対応するコードがないから化けるとか… "~" はよく使う文字ですし、そんな簡単に化けられては困るんですが… プロの方はこういうのどう処理してるのでしょう。 お詳しい方、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • UTF-8で文字化け

    いつもお世話になっております。 全てのファイルをEUC-JP で作成しております。 Googleマップを使用することになり、1ページだけ UTF-8 で出力したいと思います。 php.ini の設定は以下のようになっております。 -------------------------------------------------- default_charset EUC-JP mbstring.detect_order no value mbstring.encoding_translation Off mbstring.func_overload 0 mbstring.http_input pass mbstring.http_output EUC-JP mbstring.internal_encoding EUC-JP mbstring.language Japanese mbstring.substitute_character no value -------------------------------------------------- Googleマップを出力するページで以下のようにしたのですが 文字化けが直りません。 map.php -------------------------------------------------- ini_set("default_charset", "UTF-8"); mb_internal_encoding("UTF-8"); 他に設定する箇所はありますでしょうか。 よろしくご教示お願いいたします。 <環境> PHP:4.3.1

    • ベストアンサー
    • PHP
  • mb_convert_encoding()

    メール送信フォームの作成の際に Fatal error: Call to undefined function: mb_convert_encoding() というエラーがでてしまったのですが、 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1661461 の例にあったように php.iniを変更したのですが反映されません。 (apacheの再起動もしました。) php_mbstring.dllがないような気もしますが どのように確かめたらいいのか教えてください。 環境は OS:FreeBSD4.11 PHP:PHP4.4.0

    • ベストアンサー
    • PHP
  • phpのmb_convert_encodingで文字化け

    phpのmb_convert_encodingで文字化け phpでmb_convert_encodingを使用してSJISよりUTF-8にエンコーディングしています。 ところが、“(”や“?”などが1文字目に存在すると文字化けしてしまいます。 どのような原因が考えられますでしょうか? お願いいたします。

    • ベストアンサー
    • PHP
  • PHP 文字コードについて

    以下のような環境のホスティングサーバでSmartyを使い簡単なアプリを作っています。 サーバ PHP Version 4.3.7 phpinfoの値 mbstring.detect_order auto mbstring.encoding_translation On mbstring.func_overload 0 mbstring.http_input auto mbstring.http_output SJIS mbstring.internal_encoding EUC-JP mbstring.language Japanese mbstring.script_encoding auto mbstring.substitute_character no value 今回、PHPソースはUTF-8、HTML(Smartyテンプレ)もUTF-8で作っています(作りたいです)。 この様な場合、PHPスクリプトに「ini_set」を記述するのが良いのか、又は$_POST等で受け取ったときに毎回「mb_convert_encoding」記述するのが良いのか、その両方か、アドバイスを頂きたいです。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • phpmyadminで文字化け

    こんにちは、 現在、php5,mysql4で構築しているのですが、 phpmyadminでテーブルに入れた日本語を見ると 文字化けを起こしており、 たぶん、default_charsetだと思うのですが、 何を設定すればよいのでしょうか? MYSQL4 UTF-8 PHP5 mbstring.detect_order auto mbstring.encoding_translation Off mbstring.func_overload 0 mbstring.http_input auto mbstring.http_output SJIS mbstring.internal_encoding EUC-JP mbstring.language Japanese mbstring.script_encoding no value mbstring.substitute_character no value default_charset no value

    • 締切済み
    • PHP
  • mb_convert_encodingのタイミング

    検索フォームがあるphpファイルはShift_JISですが、検索を問い合わせるデータベースがEUC-JPになっています。 <form action="search.php" method="post"> <input type="text" name="keyword" size=30> <input type="submit" value="検索"> </form> 検索フォームで入力されたキーワードをmb_convert_encodingでShift_JISに変換してからpostしたいのですが、search.phpで検索キーワードを受け取る前にエンコード変換することは無理なのでしょうか?

    • ベストアンサー
    • PHP
  • mb_conver_encoding()の挙動

    就職活動の為、内定を頂いた会社から 初心者だけど、独学の実力を見るうえで課題を出されました。 あるuibuntu Linuxでバッチプログラムを作っています。 大体の挙動は問題ないのですが。 文字コードをEUC-JPでcsvに出力する点で 文字コードが変換されていないようなので、質問させてください $this->msg = mb_convert_encoding($this->msg,'EUC-JP','auto'); と記述して、出力した後、 kkc -c コマンドで出力ファイルの文字コード取得したところ ASCIIと表示されました。 php.iniは mbstring.detect_order = auto default_charset = "EUC-JP" mbstring.internal_encoding = EUC-JP mbstring.http_output = EUC-JP お手数ですが、ご教授願いないでしょうか。

    • ベストアンサー
    • PHP

専門家に質問してみよう