おぼえがき

いろいろ覚書です

EXCEL CSVから取り込んだ文字を UTF8変換の力技

EXCELで作成したCSVPHPでDBに取り込む際、中身の変更が出来ない状態でいわゆるSJIS依存文字を文字化けさせずに取り込む必要が出てきたので、力技的メモ

 

ソース

// 変換したい文字実体参照
$encode_list = array(
"㈱" => "(株)",//"(株)",
"㈲" => "(有)",//"(有)",
"㈳" => "(社)",//"(社)",
);

$text = "***"; // CSVから取得した文字列(文字コードSJIS-win)

// 変換範囲
$convmap = array(0, 0x10FFFF, 0, 0x10FFFF);
// 文字列を実体参照に変更
$conv_text = mb_encode_numericentity($text,$convmap, 'SJIS-win');

// 該当文字があったら差し替える
foreach($encode_list as $key => $val){
if(strstr($conv_text,$key)){
$conv_text = str_replace($key,$val,$conv_text);
}
}
// 差し替えた内容で元のSJIS文字列に戻す
$conv_text = mb_decode_numericentity($conv_text,$convmap,'SJIS-win');

// DB保存用にUTF8に変換
$db_text = mb_convert_encoding($conv_text, 'UTF-8' , 'ASCII,JIS,UTF-8,EUC-JP,SJIS,SJIS-win');

 

なんの文字が入っているか解らない状態だとこれはきついですが、社名等で入る依存文字が決まっているものならこの程度でなんとかなりました。