PHPで文字コードの変換(mb convert encoding unknown())

提供:wiki - PCスキルの小技・忘却防止メモ
移動: 案内, 検索

PHPで文字コードの変換(mb convert encoding unknown())。

ソース

やってることは基本、下記の2点。

  1. 各文字コードで変換して、元の文字と同じときの文字コードで変換。
  2. JIS系→UTF8のとき、そのまま変換すると失敗するので「sjis-win」に置き換えてから変換。
/**
 * mb_convert_encoding()の進化版:いったんsjis-winに変換する。
 * $str      :元の文字列
 * $toChar   :変換したい文字コード
 * $fromChar :変換元の文字コード
 */
function mb_convert_encoding_evo($str="", $toChar="", $fromChar=""){
	if ($str=="" || $toChar=="" || $fromChar=="") {
		return $str;
	}
	else {
		return mb_convert_encoding(mb_convert_encoding($str, "sjis-win", $fromChar), $toChar, "sjis-win");
	}
}

/**
 * 不明な文字コードの文字列を指定した文字コードに変換。
 * $str    :元の文字列
 * $toChar :変換したい文字コード
 */
function mb_convert_encoding_unknown($str="", $toChar="utf8"){
	$fromChar = checkCharCodeOfString($str);
	if ($fromChar != false) {
		$result = mb_convert_encoding_evo($str, $toChar, $fromChar);
	}
	else {
		$result = $str;
	}
	return $result;
}

/**
 * 文字コードのチェック
 * $str :元の文字列
 */
function checkCharCodeOfString($str){
	$charArys = array("JIS","ISO-2022-JP","ISO-2022-JP-MS","UTF-8","ASCII","EUC-JP","SJIS","eucJP-win","SJIS-win","CP51932");
	foreach ($charArys as $charset){
		if ( $str == mb_convert_encoding($str, $charset, $charset) ){
			return $charset;
		}
	}
	return false;
}

呼出し

元の文字コード「SJIS」→「utf8」に変換

echo mb_convert_encoding_evo("○○○○○", "utf-8", "SJIS");

元の文字コード「不明」→「utf8」に変換

echo mb_convert_encoding_unknown("○○○○○", "utf-8");

元の文字コードを調べたい

echo checkCharCodeOfString("○○○○○");

関連項目