プロが教えるわが家の防犯対策術!

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

唐突なんですが、10進数のSJISコードを、Unicodeに変換したいのですが、
可能でしょうか?

現在はやり方はわからず、対応表を作成して対応しています。

ご存知のかたいらっしゃいましたら、よろしくお願いいたします。

&#63647 ---> 

A 回答 (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);

この回答への補足

ご回答ありがとうございます!


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 ;
---------------------------------------------

補足日時:2010/11/08 12:06
    • good
    • 0

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);

?>

これで実行出来ると思いますけどどうでしょう。
    • good
    • 0
この回答へのお礼

無事解決いたしました!

こんな複雑なコード自分ではかけなかったです・・・

どうもありがとうございました。

お礼日時:2010/11/11 14:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!