• ベストアンサー

お世話になっております。

お世話になっております。 唐突なんですが、10進数のSJISコードを、Unicodeに変換したいのですが、 可能でしょうか? 現在はやり方はわからず、対応表を作成して対応しています。 ご存知のかたいらっしゃいましたら、よろしくお願いいたします。 &#63647 ---> 

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

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

  • ベストアンサー
  • yuu_x
  • ベストアンサー率52% (106/202)
回答No.1

preg_replace_callback( '/(?<=&#)\d+(?=;)/', function ($m) { return 'x'.strtoupper(ltrim(bin2hex(mb_convert_encoding(pack('N', $m[0]), 'unicode', 'sjis-win')), 0)); }, $entity_reference);

seiroku55
質問者

補足

ご回答ありがとうございます! preg_replace_callbackという関数に初めて触れました。 勉強不足で申し訳ないのですが、以下のような使い方でよろしいでしょうか? 試した結果、 Parse error: syntax error, unexpected T_FUNCTION になってしまいました。 投稿時にお知らせするべきでしたが、 バージョンはPHP 5.2.10 SJIS環境です。 ご教授いただけると幸いです。 よろしくお願いします。 ------------------こんな感じでためしました。--------------------------- $entity_reference = "&#63647"; preg_replace_callback( '/(?<=&#)\d+(?=;)/', function ($m) { return 'x'.strtoupper(ltrim(bin2hex(mb_convert_encoding(pack('N', $m[0]), 'unicode', 'sjis-win')), 0)); }, $entity_reference); echo $entity_reference ; ---------------------------------------------

その他の回答 (1)

回答No.2

yuu_xさんの記述は、5.3以降で利用出来る記法ですね。 php5.2なのであれば、create_functionを使う必要があります。 <?php preg_replace_callback( '/(?<=&#)\d+(?=;)/', create_function( '$m', 'return "x" . strtoupper(ltrim(bin2hex(mb_convert_encoding(pack("N", $m[0]), "unicode", "sjis-win")), 0));' ), $entity_reference); ?> これで実行出来ると思いますけどどうでしょう。

seiroku55
質問者

お礼

無事解決いたしました! こんな複雑なコード自分ではかけなかったです・・・ どうもありがとうございました。

関連するQ&A

  • 文字コードの変換プログラム

    SJIS,JIS,EUC,Unicodの変換プログラムを作っています。 SJISを基調とし、それ以外とコード組む事で実現させていますが、 SJIS-Unicodeの変換がどのように行えばよいのかわかりません。 サイト等で対応表なども参考にしているのですが、 どこでどう使えばいいのか見当がつきません。 アドバイスお願いします。

  • 携帯絵文字について

    携帯サイトを作成しており各キャリアの絵文字コードを Unicode表記で以下のようにテキストファイルにまとめています。 番号,名前,DOCOMO,au,Softbank 1,晴れ,&#xE63E;,&#xE488;,&#xE04A; 2,曇り,&#xE63F;,&#xE48D;,&#xE04A; ・・・ 絵文字のベースはドコモにしようと以下のURLを参考に設定 しました。 http://www.nttdocomo.co.jp/service/imode/make/content/pictograph/basic/index.html auやSoftbankのサイトを参考にすればUnicode表記のコードが わかるのですがドコモの絵文字表をベースとしている事もあり それぞれの順番がバラバラで途方に暮れてしまいます。 どこかに見やすくまとまっているサイトがないものかと思い 探してみましたがみつかりませんでした。 Unicode表記で3社の絵文字とコードがわかればいいのですが そのようなサイトをご存知の方がおりましたら是非教えて下さい! 宜しくお願い致します。

  • VBScriptでのコード変換

    お世話になります。 VBScriptでUnicodeからSjisに変換する事は可能なの でしょうか? どなたかご存知でしたらお教え願います。

  • unicode <-> sjis 変換

    UNICODEからSJISに変換するDLLをVC6.0で作成しました。 2層のswitch文で30000行(約400キロバイト)のソースファイルになりました。 コンパイル後も500キロバイトほどになります。 しかしvectorなどにおいてある変換ソフトをみると100キロバイトほど でした。そういったソフトはどのようにして変換しているのでしょうか? (APIかなにかを呼び出しているのでしょうか?) あるいはunicodeとsjisの漢字コードに数学的な相関関係があるのでしょうか?

  • 文字化け

    0x81AF U+FF0D # FULLWIDTH HYPHEN-MINUS [2000] unicodeからSJISに変換するプログラムを作っていますが、 上記のコードのみ、SJISでは表示されず、その原因がわかりません。 unicode「-」 SJIS「・」←と、なってしまう。 他の変換(全文字やったわけではありませんが)はうまくいっており、また、SJIS→unicodeへの変換をすれば元通り「-」の表示になります。考えられる原因はどんなものでしょうか? 環境 ・VC++6.0 ・Windows VISTA

  • Unicode

    先日は文字コードについて色々助言してくださりありがとうございました。 おかげさまでJIS,EUC,SJISの変換はできましたが、 Unicodeについて詰まっているところがあります。 SJIS→UnicodeはSJISにあったU+XXXXに変換し、 それを1~4バイトにさらに変換して文字表記されることで出来ます。 後者の1~4バイトにさらに変換するやり方は出来ているのですが、 前者のSJISにあったU+XXXXに変換するところで詰まっています。 ##SJIS Unicode Name Note 0x00 U+0000 # <control> 0x01 U+0001 # <control> 0x02 U+0002 # <control> 0x03 U+0003 # <control> 0x04 U+0004 # <control> 0x05 U+0005 # <control> 0x06 U+0006 # <control> 0x07 U+0007 # <control> : : こういった変換表(テキストファイル)があるのですが、 どのようにしたらこのファイルをプログラム上で操作? できるのでしょうか? 例)SJISで0x07→U+0007→1~4バイト変換の 0x07→U+0007部分についてです。 また、逆に変換する際の0x07←U+0007についても わからないでいます。 何かヒントをください。

  • IBM漢字コード⇒SJIS変換方法

    IBM漢字コードで受取ったファイルをJAVAにてSJISに変換したいのですが、変換方法がわかりません。 一度unicode変換した後、SJISに変換する必要があるのでしょうか? 過去の検索を見てもヒットせず困っております。 どなたか変換方法がわかる方ご教示いただけませんでしょうか。

  • CakePHPでDBに入れる際文字化け

    お世話になります。 現在CakePHPで携帯サイトを作成しているのですが、 通常出力は問題ないのですが、 フォームからDBに入れる際に文字化けが起こります。 ■現在行っている設定 charset=SJIS ファイルの文字コード:SJIS CakePHPのdatabese.phpのエンコード設定:SJIS MySQL の文字セット: UTF-8 Unicode (utf8) ご教授よろしくお願いいたします。

    • 締切済み
    • PHP
  • JAVAでSJISのコード変換

    JAVAで、UnicodeからSJISへのコード変換を行った上で ファイル出力を行いたいです。 たとえば文字列中にある「(1)」の文字コードが以下である時 ------------------------------- SJIS:8744 - UNICODE:2464 ------------------------------- 2464のコードを8744に変換した上でファイル出力したいです。 処理として、以下の様な形を考えているのですが 文字化けしてしまします。 ------------------------------- String source = "(1)あああああ"; 文字列の数分ループ処理↓ int code = (int) (source[x].charAt(i)); if (code == 2464) { strBuff.append(String.valueOf((char) (8744))); } ------------------------------- Unicodeで扱われているので「getByte("SJIS")」などとしているのですが 同様の結果となります。 何か良い手はないものでしょうか?

    • ベストアンサー
    • Java
  • シフトJISをunicodeへ(逆)変換したい

    このカテで良いのか良く分からなかったのですが... シフトJISのバイナリコードをunicodeバイナリコードへ(あるいは逆)変換するための対応表(URL)を探しているのですが良くわかりません。 米国で使用されている2バイトコード体系へ変換したいのでunicodeか否かはっきりしないという問題もあります。 以上について、わかりやすい参考URLがありましたら教えて下さい。

専門家に質問してみよう