はてなダイアリーに書いた日本語に無い中国語漢字は全て数値文字参照
に変換されてしまいます。
WordPressに移行しようと思い、調査のため
Movable Type形式でデータをエクスポートしたはいいが、数値文字参照のままでは。。。
意味がないのでこの部分を変換してみました。
言語は何でもよかったのですが、丁度手元にあったPHP環境で書きました。
変換の関数ですが、どれを使ったらいいのか分からなくて
mb_convert_encoding($str ,'UTF-8','HTML-ENTITIES');
や
$convmap = array ( 0x0000, 0xffff, 0x0000, 0xffff );
mb_decode_numericentity ( $str, $convmap, 'UTF-8' );
いろいろ試行錯誤しましたが上記では一部の中国語が変換されなかったりしたので
(おそらく16進数が入っている数値文字参照が変換されない)
結局html_entity_decodeこれでいけるみたいです。
コメントにしてありますが、タグを変換したくない場合は対象の文字だけを
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
数値文字参照をUTF-8に変換
</head>
<body>
<?php//変換メソッド
function entity_to_utf($str){
return html_entity_decode($str, ENT_QUOTES, 'UTF-8');
}//正規表現で(.*?);形式のものだけを変換う
//<等のHTMLタグはひっかけないようにする。
//function convert_sutimojisanshou($intext){
// $text = $intext;
// $buffer="";
// //数値文字参照を見つける
// preg_match_all("/(.*?);/is", $text, $contentmatches);
// if(isset($contentmatches[0][0])){
// $intMaxCount = count($contentmatches[0]);
// for($j = 0; $j < $intMaxCount; $j++){
// $buffer = $contentmatches[0][$j];
// $str_char = entity_to_utf($buffer);
// if("" != $str_char){
// $intext = str_replace($buffer,$str_char, $intext);
// }
// }
// }
// return $intext;
//}//実行時間の調整
set_time_limit(3000);
//ファイルの読み込み
$fpr = fopen('hatena.txt', 'r');
//ファイルの書き込み
$fpw = fopen('writefilename.txt', 'w');if ($fpr){
while ($buffer = fgets($fpr)){
fwrite($fpw,entity_to_utf($buffer));
}
}fclose($fpr);
fclose($fpw);?>
</body>
</html>
抜き出す必要があるかもです。
まあ今回は試しただけですが、もしかしたら移行するかもしれません。