Türkçe Karakter Destekli strlen ve substr (w/ PHP)

PHP'de string fonksyonlarında Türkçe karakterle karşı biraz rahatsızlık vardır. Bu rahatsızlıklardan kurtulmak için Türkçe karakter destekli strlen ve substr fonksyonları hazırladım. Aşağıdaki fonksyonlar hakkında hata oluşursa söyleyiverin ;)

function strlen2($string) {
	// turkce karakterleri bi' diziye atiyoruz 
	$array = array("ç","ğ", "ı", "ö", "ş", "ü", "Ç", "Ğ", "İ", "Ö", "Ş", "Ü");
	// turkce karakterleri strlen'i 1 olan bir
	// karakter ile replace ederek gercek strleni
	// buluyoruz ;)
	$string = str_replace($array, chr(1), $string);
	return strlen($string);
}

function substr2($string, $start, $length = null) {
	// turkce karakterleri bi' diziye atiyoruz 
	$array = array("ç","ğ", "ı", "ö", "ş", "ü", "Ç", "Ğ", "İ", "Ö", "Ş", "Ü");
	
	// chunk karakter
	$cchr = chr(1);
	
	// regular expression icin pattern
	$pattern = "(" . implode("|", $array) . ")";
	// metin icerisindeki turkce karakterlerimizi bir diziye 
	// sonra kullanmak icin atiyoruz
	preg_match_all($pattern, $string, $found_tr_chars);
	$found_tr_chars = $found_tr_chars[0];
	
	// turkce karakterler yerine chunk karakterimizi
	// koydugumuz bir metin olustuyoruz, burada gercek 
	// metin uzunlugunu bulmamiz icin yapilan bir calisma 
	// var aslinda ^.^
	$replaced_text = preg_replace($pattern, $cchr, $string);
	
	// gercek metin genisligi
	$new_strlen = strlen($replaced_text);
	
	// $length parametremiz atanmamisa kac karakter oldugunu 
	// hesapliyoruz
	if(is_null($length)) {
		$length = $new_strlen - $start;
	}
	
	// kesilecek temporary metnimiz
	$substring = substr($replaced_text, $start, $length);
	
	// metnimizin oncesinde kalan Turkce karakterlerimizi 
	// diziden atmak icin kucuk bir calisma
	if($start > 0) {
		$found_tr_chars = array_slice($found_tr_chars, $start - strlen(str_replace($cchr, null, substr($replaced_text, 0, $start))));
	}
	
	// kesilen metnin icindeki Turkce karakter sayisi 
	$used_tr_chars = $length - strlen(str_replace($cchr, null, $substring));
	
	// artik chunk karakterlerimizi yerinde olmasi gereken 
	// Turkce karakterlere donusturuyoruz
	$return = "";
	if(count($used_tr_chars) > 0) {
		for($i = 0;$i < $used_tr_chars;$i++) {
			$pos = strpos($substring, $cchr);
			$return .= substr($substring, 0, $pos) . $found_tr_chars[$i]; 
			$substring = substr($substring, $pos + 1);
		}
	}	

	// arta kalan karakterleri de ekledikmiydi ;)
	$return .= $substring;
	return $return;
}