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