メール送信の文字化け対応

UTF8で記述された丸囲み数字(①)やローマ数字(Ⅰ)をメール送信の際にJISに変換しようとすると、JISがそれらの文字に対応していないため、文字化けが発生する。

それらの文字列を使わないようにするのがベストだけど、そうもいってられないケースの場合は、下記のコードで別の文字で置き換えてしまうのがよさそう。

 

function replaceText($str){
$arr = array(
'\xE2\x85\xA0' => 'I',
'\xE2\x85\xA1' => 'II',
'\xE2\x85\xA2' => 'III',
'\xE2\x85\xA3' => 'IV',
'\xE2\x85\xA4' => 'V',
'\xE2\x85\xA5' => 'VI',
'\xE2\x85\xA6' => 'VII',
'\xE2\x85\xA7' => 'VIII',
'\xE2\x85\xA8' => 'IX',
'\xE2\x85\xA9' => 'X',
'\xE2\x85\xB0' => 'i',
'\xE2\x85\xB1' => 'ii',
'\xE2\x85\xB2' => 'iii',
'\xE2\x85\xB3' => 'iv',
'\xE2\x85\xB4' => 'v',
'\xE2\x85\xB5' => 'vi',
'\xE2\x85\xB6' => 'vii',
'\xE2\x85\xB7' => 'viii',
'\xE2\x85\xB8' => 'ix',
'\xE2\x85\xB9' => 'x',
'\xE2\x91\xA0' => '(1)',
'\xE2\x91\xA1' => '(2)',
'\xE2\x91\xA2' => '(3)',
'\xE2\x91\xA3' => '(4)',
'\xE2\x91\xA4' => '(5)',
'\xE2\x91\xA5' => '(6)',
'\xE2\x91\xA6' => '(7)',
'\xE2\x91\xA7' => '(8)',
'\xE2\x91\xA8' => '(9)',
'\xE2\x91\xA9' => '(10)',
'\xE2\x91\xAA' => '(11)',
'\xE2\x91\xAB' => '(12)',
'\xE2\x91\xAC' => '(13)',
'\xE2\x91\xAD' => '(14)',
'\xE2\x91\xAE' => '(15)',
'\xE2\x91\xAF' => '(16)',
'\xE2\x91\xB0' => '(17)',
'\xE2\x91\xB1' => '(18)',
'\xE2\x91\xB2' => '(19)',
'\xE2\x91\xB3' => '(20)',
'\xE3\x8A\xA4' => '(上)',
'\xE3\x8A\xA5' => '(中)',
'\xE3\x8A\xA6' => '(下)',
'\xE3\x8A\xA7' => '(左)',
'\xE3\x8A\xA8' => '(右)',
'\xE3\x8D\x89' => 'ミリ',
'\xE3\x8D\x8D' => 'メートル',
'\xE3\x8C\x94' => 'キロ',
'\xE3\x8C\x98' => 'グラム',
'\xE3\x8C\xA7' => 'トン',
'\xE3\x8C\xA6' => 'ドル',
'\xE3\x8D\x91' => 'リットル',
'\xE3\x8C\xAB' => 'パーセント',
'\xE3\x8C\xA2' => 'センチ',
'\xE3\x8E\x9D' => 'cm',
'\xE3\x8E\x8F' => 'kg',
'\xE3\x8E\xA1' => 'm2',
'\xE3\x8F\x8D' => 'K.K.',
'\xE2\x84\xA1' => 'TEL',
'\xE2\x84\x96' => 'No.',
'\xE3\x8D\xBB' => '平成',
'\xE3\x8D\xBC' => '昭和',
'\xE3\x8D\xBD' => '大正',
'\xE3\x8D\xBE' => '明治',
'\xE3\x88\xB1' => '(株)',
'\xE3\x88\xB2' => '(有)',
'\xE3\x88\xB9' => '(代)',
);
return str_replace( array_keys( $arr), array_values( $arr), $str);
}