- ベストアンサー
お世話になっております。
お世話になっております。 唐突なんですが、10進数のSJISコードを、Unicodeに変換したいのですが、 可能でしょうか? 現在はやり方はわからず、対応表を作成して対応しています。 ご存知のかたいらっしゃいましたら、よろしくお願いいたします。  ---> 
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
preg_replace_callback( '/(?<=&#)\d+(?=;)/', function ($m) { return 'x'.strtoupper(ltrim(bin2hex(mb_convert_encoding(pack('N', $m[0]), 'unicode', 'sjis-win')), 0)); }, $entity_reference);
その他の回答 (1)
- hogehoge78
- ベストアンサー率80% (433/539)
回答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); ?> これで実行出来ると思いますけどどうでしょう。
質問者
お礼
無事解決いたしました! こんな複雑なコード自分ではかけなかったです・・・ どうもありがとうございました。
補足
ご回答ありがとうございます! preg_replace_callbackという関数に初めて触れました。 勉強不足で申し訳ないのですが、以下のような使い方でよろしいでしょうか? 試した結果、 Parse error: syntax error, unexpected T_FUNCTION になってしまいました。 投稿時にお知らせするべきでしたが、 バージョンはPHP 5.2.10 SJIS環境です。 ご教授いただけると幸いです。 よろしくお願いします。 ------------------こんな感じでためしました。--------------------------- $entity_reference = ""; 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 ; ---------------------------------------------