Neden metinsel ifadeden parça alırken mb_substr kullanmalıyız?

Bu makalede  metinsel ifadeden parça alırken substr() fonksiyonu yerine neden mb_substr() fonksiyonunu  kullanmamız gerektiğini göreceğiz.

substr() fonksiyonu

substr() fonksiyonu metinsel(string) bir ifadenin solundan, sağından, ya da "şu karakter başlayıp, şu kadar al"  metin parçası almaya yarayan bir fonksiyondur. Aşağıdaki örnekleri incelediğinizde daha iyi anlayacaksınız. 

<?php
 
$metin ="gaziantep";
 
$m1 = substr($metin, 0, 4);
echo $m1; //gazi sonucunu döndürür
echo "<br>";

Yukarıdaki kullanımda ilk karakterden başlayarak 4 karakter alınmasını söyledik. Unutmamız gereken nokta, saymaya 0'dan başlamamız gerektiğidir.
 
$m2 = substr($metin, -5);
echo $m2; //antep sonucunu döndürür
echo "<br>";

Yukarıdaki kullanımda ise substr() fonksiyonunun sağdan 5 karakter almasını söyledik, eksi bir değer verince fonksiyon sağdan başlayıp alır. 
 
$m3= substr($metin, 4);
echo $m3; //antep sonucunu döndürür
echo "<br>";

Yukarıdaki kullanımda ise substr() fonksiyonunun soldan 4 karakter almasını söyledik, artı bir değer verince fonksiyon soldan başlayıp alır. 
 
$m4= substr($metin, 4,2);
echo $m4; //an sonucunu döndürür.
echo "<br>";

Yukarıdaki kullanımda ise 5. karakterden başlayıp, 2 karakter almasını söyledik,  saymaya 0'dan başlandığı için substr() fonksiyonunda 5 yerine 4 yazıyoruz.
 
?>
 
Neden substr() yerine mb_substr() kullanmalıyız?

Metinsel ifadeyi bir değişkene kendimiz atayıp,  substr() fonksiyonu kullanınca bir sorunla karşılaşmamaktayız, her şey yolunda. Fakat mysql gibi bir veritabanına utf-8 karakter kodlamasıyla atadığımız bir string ifadeyi veritabanından çekip ekrana yazmak istersek ekranda saçma sapan karakterler görebiliriz.

Bunun nedeni; substr() fonksiyonunun Türkçe karakterlerin de düzgün yazılmasına yarayan uluslararası UTF-8 kodlamasını desteklememesinden kaynaklanır. Aşağıdaki gibi substr() yerine mb_substr() fonksiyonunu kullanırsanız sorun çıkmamaktadır. 

mb_substr($metin,0,$sayi,'UTF-8')

mb_substr() fonksiyonunun kullanımı, substr() fonksiyonu ile hemen hemen aynıdır, sadece son parametre olarak "UTF-8" kod karakterine göre metinsel parça alması gerektiğini söylüyoruz.

Örneğin blog'da sağ tarafta en çok okunan 25 makaleyi sıralamak istedim, fakat bazı makalelerin başlıkları uzun olduğundan substr() fonksiyonu ile kısaltmak gerekti. fakat sonuç aşağıdaki gibi oldu. 



Daha sonra mb_substr() fonksiyonu kullanarak aynı işlemi yaptım ve sonuç tam istediğim gibi oldu.

Ara ara bu önemli püf noktalarını da vermeye çalışacağım, unutmayın PHP web programlama dilinde sizin karşılaştığınız sorunla mutlaka daha önce karşılaşan olmuştur, bir sorunla karşılaştığınız "Bu nasıl dil?" deyip, hemen vazgeçmeyin, araştırın çözümü bulacaksınız.

Mutlu Kodlamalar,
Temmuz, 2015


KAYNAKLAR

1) PHP.net Kütüphanesi, substr() kullanımı
http://php.net/manual/tr/function.substr.php

2
) PHP.net Kütüphanesi, mb_substr() kullanımı
http://php.net/manual/tr/function.mb-substr.php Bookmark and Share
Dil Değiştir(Change Language)