PHP’de bir kelimenin yada metnin uzunluğunu almak için ilk olarak str_len fonksiyonu kullanmak akla gelebilir fakat türkçe karakterler olduğu zaman string değerde uzunluk konusunda fazladan sonuç ile karşılaşabilirsiniz.
PHP str_len, mb_strlen kullanımı ve farklılıkları
str_len
fonksiyonuna parametre olarak verilen string değer içerisinde eğer ö,ı,ğ,ş
gibi karakterler veya daha farklı özel karakterler yok ise o zaman uzunluk boyutunu doğru olarak dönderecektir fakat eğer bahsettiğim değerler var ise o zaman uzunluk değerinin fazla çıktığını fark edeceksiniz örnek çok
kelimesini str_len
fonksiyonuna parametre olarak geçtiğimizde 3
değerinin dönmesi gerekmektedir fakat 4
değeri dönmektedir bunun nedeni daha öncede bahsetmiş olduğumuz gibi ç
karakterinden kaynaklanmaktadır. Bunun çözümü için yapmanız gereken utf8_decode
fonksiyonunu kullanıp özel karakterleri ?
işaretine çevirip sayma işlemini gerçekleştirebilirsiniz. Örnek için alttaki koda göz atabilirsiniz.
strlen Sözdizimi
1 | int strlen ( string $dizge ) |
PHP
1 2 3 4 5 6 7 8 | <?php header('Content-Type: text/html; charset=utf-8'); $text = "çok"; echo "Encode edilmiş kelime: " . utf8_decode($text) . "<br>"; echo "Encode edilmemiş kelime: " . $text .""; echo "Encode edilmiş kelime uzunluğu: " . strlen(utf8_decode($text)) . ""; echo "Encode edilmemiş kelime uzunluğu: " . strlen($text) . ""; ?> |
Sonuç
1 2 3 4 | Encode edilmiş kelime: çok Encode edilmemiş kelime: çok Encode edilmiş kelime uzunluğu: 3 Encode edilmemiş kelime uzunluğu: 4 |
Decode işlemi yapmadan kullanmak isterseniz yapmanız gereken fonksiyon ise mb_strlen fonksiyonudur bu fonksiyon strlen fonksiyonuna göre 2 parametre alıyor fakat 2.parametre opsiyoneldir strlen fonksiyonunda olduğu gibi string değerinizi geçtiğinizde bu değerin kodlamasını seçebiliyorsunuz seçebileceğiniz kodlama türlerine ise [bcvc url=”http://php.net/manual/tr/mbstring.configuration.php#ini.mbstring.internal-encoding”]buradan[/bcvc] ulaşabilirsiniz. üstteki kodu mb_strlen fonksiyonuna göre uyarlayalım.
mb_strlen Sözdizimi
1 | int mb_strlen ( string $dizge [, string $kodlama ] ) |
PHP
1 2 3 4 5 6 | <?php header('Content-Type: text/html; charset=utf-8'); $text = "çok"; echo "Kelime: " . $text ."<br?-->"; echo "Kelime uzunluğu: " . mb_strlen($text) . ""; ?> |
Sonuç
1 2 | Kelime: çok Kelime uzunluğu: 3 |
Gördüğünüz gibi herhangi bir encode işlemine tabi tutmadan ve mb_strlen fonksiyonu için opsiyonel olan kodlama türünü belirtmeden istediğimiz sonuca daha kısa yolla ulaşmış olduk.
mb_strlen işe yaramıyordu. kafayı yedik. utf8_decode işe yaradı. bu örnek hiçbir yerde yoktu. teşekkür ederiz.
Rica ederim önemli olan sorunun giderilmiş olması 🙂