PHPのsubstr replace()のマルチバイト版

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

PHPの文字の置換え(substr_replace())のマルチバイト版。substr_replace()は、「n文字目からm文字を置換え」ってヤツ。

ソース

/**
* mbSubstrReplace() – substr_replace()のマルチバイト版
* @param str $str 対象の文字列
* @param str $replace 置換えたい文字列
* @param int $start 開始位置
* @param int $num 文字数
*/
function mbSubstrReplace( $str, $replace, $start, $num=NULL ){
	// 文字数取得
	$strNum = mb_strlen($str);

	if( $start < 0 ){
		// 負の値だったら終端からの位置
		$start = $strNum + $start;
		if( $start < 0 ){
			// 終端からの位置が負の値になるなら「0」にする
			$start = 0;
		}
	}

	// 置換える箇所の「前」を取得
	$tempBefore = mb_substr($str, 0, $start);

	if( $start > $strNum ){
		// 開始位置が文字数より多い
		$num = $strNum;
	}

	if( !isset($num) ){
		// 文字数の指定無し
		$num = $strNum;
	}
	elseif( $num < 0 ){
		// 負の値だったら置き換えない終端までの文字数
		$num = $strNum + $num;
		if( $num < 0 ){
			// 「置き換えない終端までの文字数」が負の値になる場合
			$num = $start – $strNum;
		}
	}
	else{
		$num = $start + $num;
	}

	// 置換える箇所の「後」を取得
	$tempAfter = mb_substr($str, $num, $strNum);

	// 置換えの文字と合体
	return $tempBefore . $replace . $tempAfter;

}

呼び出し

例)文字列の0~5文字目までを置換え。

echo mbSubstrReplace( "あいうABCDEFGHIあいうJKLMNOPQRSTU", "abcd", 0, 5 );
// 結果:abcdCDEFGHIあいうJKLMNOPQRSTU

関連項目