上記サイト様より引用コード。
上記サイト様も引用による紹介だったが、本元が繋がらなくなっているようなので。
スニペット
function safe_getEncoding($str, $default='auto') { foreach (array('EUC-JP', 'SJIS', 'UTF-8') as $charset) { if ($str == mb_convert_encoding($str, $charset, $charset)) { return $charset; } } return $default; }
「mb_convert_encoding」の挙動は本当に困りもので、最初の文字が1バイト文字、アルファベットとかだと「auto」で変換してもアスキー文字として判断されるらしい。
なのでこのコードは全てに対して一度全てのエンコーディングで変換をかけて文字列のエンコーディングを返す、というなんとも漢気のあるものになっている。
例
mb_convert_encoding($text, 'UTF-8', safe_getEncoding($text));
.