• ベストアンサー

16進数の文字列を普通の文字列に直す方法

色々と探し尽くしたのですが、 安室奈美&#x6075 のような文字列を 安室奈美恵 という普通の文字列に直す方法が解りません。 chr pack とかが引っかかりましたが、 どうやら設定が必要なようでお手上げです。 どなたかご教授よろしくお願い致します

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

  • ベストアンサー
  • UmJammer
  • ベストアンサー率58% (115/196)
回答No.4

ANo.2です。 >パラメータとかあるのでしょうか? マニュアルに書いてあります。 3つ目の引数(パラメータ)に適切な文字セットを指定する必要があるのでしょう。

sunnylife
質問者

お礼

自己解決しました。 HTML実体参照とかいうものだったようです。 html_entity_decode では通常の日本文字部分がデコードできないようなので、 mb_decode_numericentity を使いました。 //16進数を10進数に変換する(mb_decode_numericentityは16進数に未対応なので) function hex2Dec($str){ $str = preg_replace_callback( "/&#(x|X)([^;]+);/", create_function( '$m', 'return "&#".hexdec($m[2]).";";' ), $str ); return $str; } //UTF-8のファイルを開いて、16進数の文字列なら日本語変換を行う if(preg_match("/&#x/i",$data[4])){ $data[4]=mb_decode_numericentity(hex2Dec($data[4]), array(0, 0xffff, 0, 0xffff), "UTF-8"); } しばらくプログラミングから離れていたので いい頭の体操になりました。 また質問する時は宜しくお願いいたします。

その他の回答 (4)

  • JV44
  • ベストアンサー率50% (24/48)
回答No.5

数値文字参照というものですね。 html_entity_decode("安室奈美恵",ENT_QUOTES,"UTF-8"); で文字に戻せます。

sunnylife
質問者

お礼

都合により、プログラムがSJIS、 読み込みファイルがUTF-8というややこし環境のせいか、 画面上は日本語でも、 ソースを見るとデコードされていません。 環境設定に何かあるのかも? 一応解決しました。 ありがとうございます。

  • euwai
  • ベストアンサー率57% (4/7)
回答No.3

16進数ではなく、URLエンコードかと思われます。 下のサイトにてデコードすると、文字が表示されます。 http://home.kendomo.net/board/decode/

sunnylife
質問者

お礼

ありがとうございます。 でもURLエンコードでこうはならないのでは? 自前プログラムでの変換がしたいのであります。

  • UmJammer
  • ベストアンサー率58% (115/196)
回答No.2

html_entity_decode()関数でデコードできますよ。 http://jp.php.net/manual/ja/function.html-entity-decode.php

sunnylife
質問者

お礼

デコードできません。 画面上では漢字が表示されますが、 ソースを見ると、相変わらず 安室奈美&#x6075 が表示されてます? パラメータとかあるのでしょうか? 独学ゆえの・・・

  • Faq_Men
  • ベストアンサー率13% (8/58)
回答No.1

>安室奈美&#x6075 これはどう見ても私には16進数には見えません 根本的に何かが間違っちゃってるのではないでしょうか?

sunnylife
質問者

お礼

思い出しました。 メールアドレスを暗号(?)化するための あれでしたね。