• ベストアンサー

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

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

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

  • ベストアンサー
  • 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