正規表現が正しく動く(実体参照(&#xnum;)をsjis に変換


スポンサーリンク

正規表現がこれだと動く。
何のときに $1 が使えるのか不明。
require "MyLibs/strcode_hex.cgi"; #←うち専用 strcode_hexJIS をこのファイルに保存してある
$a ="&#x".sprintf("%04x",39135).";";
$a.="&#x".sprintf("%04x",29609).";";
$a.="&#x".sprintf("%04x",12539).";";
$a.="&#x".sprintf("%04x",12481).";";
$a.="&#x".sprintf("%04x",12519).";";
$a.="&#x".sprintf("%04x",12467).";";
$a=strcode_hexJIS($a);
$b=strcode_hexJIS("情報時代");
tracesub("#=======================================================================");
tracesub("$a");
tracesub("$b");
tracesub("#=======================================================================");
#
# 結果
# 
# ============================================================================
sub strcode_hexJIS
# ============================================================================
{
	local($a)=$_[0];
	use Encode;
	use Encode qw/ from_to /;
	use Encode 'decode';
	use Encode 'encode';
	
	$a=~ s/&#x([0-9A-Fa-f]{4});/chr(hex($1))/ge;
	$a=encode('utf-8', $a);
	$a=strcode_conv("utf8N2sjis",$a);
	return($a);
}

スポンサーリンク