php – safe_getEncoding($str, ‘hoge’) – 文字列のエンコーディングを調べる

PHP 文字コードの取得 | HAPPY*TRAP

上記サイト様より引用コード。

上記サイト様も引用による紹介だったが、本元が繋がらなくなっているようなので。

スニペット

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));

.