Kas 09
strtupper ve strtlower için Türkçe probleminin aşılmasına yarayan fonksiyonlar:
function trstrtoupper($metin) {
$metin = strtr($metin, “ğşıöüçi”, “ĞŞIÖÜÇİ”);
return strtoupper($metin);
}
function trstrtolower($metin) {
$metin = strtr($metin, “ĞŞIÖÜÇİ”, “ğşıöüçi”);
return strtolower($metin);
}

Mayıs 28th, 2008 at 5:21
Altan merhaba;
Tüm işlerinde utf-8 kullanan arkadaşlar için de ben bir ekleme yapmak istedim.
PHP dosyanız utf-8 olarak kaydedilmişse dosya üzerindeki $degisken=’ağaç’ gibi tanımlamalarda ve dışarıdan gelen utf-8 kodlanmış veride substr($değişken, 1, 1) == ‘ğ’ değildir
Nedeni ise basit, utf-8′has olan karakterler yani 255 karakterlik ansi ascii listesinde olmayan karakterler bellekte iki byte kaplamaktadır ve substr fonksiyonu iki bytelık yumuşak g harfinin yalnızca ilk byteını almaktadır.
Denemek isterseniz substr($değişken, 1, 2) == ‘ğ’ nin true olduğunu göreceksiniz.
Çözüm ise şimdilik multibyte string modülünü(mbstring) kullanmaktan geçiyor.
Karakter katarı küçültmek yada büyütmek için ben kendi kütüphaneme şöle bişi yazmıştım.
function toLower($text){
return(mb_convert_case(str_replace(’I', ‘ı’, $text), MB_CASE_LOWER, ‘UTF-8′));
}
function toUpper($text){
return(mb_convert_case(str_replace(’i', ‘İ’, $text), MB_CASE_UPPER, ‘UTF-8′));
}
str_replace ise i/I uyuşmazlığı yüzünden utf-8 de olsa bölgesel kodlama belirtilmediği sürece gerekli.
Çözüm şimdilik bu demiştim, beni PHP 6 ile gelen utf desteği sayesinde türkçe değişken isimleri kullanmaktan çok string işlemlerinde mbstring’e ihtiyaç kalmaması sevindiriyor.