
PHP String Fonksiyonları: Arama, Değiştirme ve Biçimlendirme
Metin işleme, web uygulamalarında en çok tekrarlanan işlerden biri. PHP bu iş için geniş bir fonksiyon kümesi sunar, ancak fonksiyonların büyük bölümü baytlar üzerinde çalışır. Türkçe metinlerde doğru sonuç almak için hangi fonksiyonun ne üzerinde işlem yaptığını bilmek gerekir.
Uzunluk ve UTF-8 tuzağı
UTF-8 kodlamasında Türkçe karakterler iki bayt kaplar. Bayt sayan fonksiyonlar bu yüzden beklenenden büyük sonuç verir. Karakter sayısı gerekiyorsa mb_ ile başlayan çok baytlı sürüm kullanılmalıdır:
$metin = 'Çağrı';
echo strlen($metin); // 7 (bayt sayısı)
echo mb_strlen($metin); // 5 (karakter sayısı)Aynı ayrım kesme işleminde de geçerlidir. substr bir karakteri ortasından böldüğünde çıktıda bozuk karakter oluşur; mb_substr bu sorunu yaşatmaz. Kısaltma yapan her yerde çok baytlı sürüm tercih edilmelidir.
Arama işlemleri
PHP 8 ile gelen üç fonksiyon, eskiden strpos ile yazılan kontrolleri okunur hale getirdi. strpos sıfır döndürebildiği için katı karşılaştırma gerektiriyor ve bu detay sık atlanan bir hata kaynağıydı:
if (str_contains($baslik, 'php')) { /* ... */ }
if (str_starts_with($yol, '/admin')) { /* ... */ }
if (str_ends_with($dosya, '.jpg')) { /* ... */ }
// konum gerekiyorsa
$konum = strpos($metin, 'anahtar');
if ($konum !== false) { /* ... */ }Büyük küçük harf duyarsız arama için stripos kullanılır. Türkçe karakter içeren aramalarda ise mb_stripos daha güvenilir sonuç verir.
Değiştirme
Sabit metin değişimi için str_replace yeterlidir ve dizi kabul ettiği için birden fazla değişimi tek çağrıda yapabilir. Kalıp gerekiyorsa düzenli ifade kullanılır, ancak düzenli ifade her zaman daha yavaştır:
$temiz = str_replace(['\r\n', '\r'], '\n', $girdi);
$slug = preg_replace('/[^a-z0-9]+/', '-', mb_strtolower($baslik, 'UTF-8'));
$slug = trim($slug, '-');Basit bir işi düzenli ifadeyle yapmak, hem okunurluğu düşürür hem gereksiz maliyet ekler. Sabit metin aranıyorsa str_replace tercih edilmelidir.
Bölme ve birleştirme
$parcalar = explode(',', 'ayse,mert,zehra');
$birlesik = implode(' | ', $parcalar);
// sınırlı bölme: en fazla iki parça
[$kullanici, $alan] = explode('@', $eposta, 2);
// satırlara ayırma
$satirlar = preg_split('/\R/', $metin, -1, PREG_SPLIT_NO_EMPTY);explode ikinci parametreyle sınırlandırıldığında, ayırıcının metnin devamında tekrar geçmesi sorun çıkarmaz. Eposta adresi ayrıştırma gibi işlerde bu sınır hatalı sonuçları önler.
Biçimlendirme
Sayı ve metni bir arada üretirken birleştirme operatörü yerine biçimlendirme fonksiyonları kullanmak, çıktının tutarlı kalmasını sağlar:
printf('%s: %.2f TL', $urun, $fiyat);
echo number_format(1234567.891, 2, ',', '.'); // 1.234.567,89
echo str_pad('7', 3, '0', STR_PAD_LEFT); // 007Türkçe biçimde ondalık ayırıcı virgül, binlik ayırıcı noktadır. number_format bu iki karakteri parametre olarak aldığı için yerelleştirme ayarına bağlı kalmadan doğru çıktı üretir.
Kırpma ve temizleme
Kullanıcıdan gelen metinde baştaki ve sondaki boşluklar neredeyse her zaman istenmez. trim varsayılan olarak boşluk, sekme ve satır sonlarını temizler; ikinci parametreyle hangi karakterlerin kırpılacağı belirlenebilir:
$ad = trim($_POST['ad'] ?? '');
$yol = rtrim($dizin, '/') . '/dosya.txt';
// uzun metni kelime bölmeden kısalt
$ozet = mb_substr($icerik, 0, 160);
$ozet = mb_substr($ozet, 0, mb_strrpos($ozet, ' ')) . '...';Türkçe karakterler ve harf dönüşümü
Büyük küçük harf dönüşümü Türkçede özel bir sorun barındırır. Noktasız ı harfinin büyüğü I, noktalı i harfinin büyüğü İ olmalıdır. Standart fonksiyonlar bu ayrımı yapmaz ve i harfini I'ya çevirir:
echo strtoupper('istanbul'); // ISTANBUL (yanlış)
echo mb_strtoupper('istanbul', 'UTF-8'); // İSTANBULKarşılaştırma yapılacaksa iki tarafı da aynı fonksiyonla dönüştürmek gerekir. Kullanıcı adı ve eposta gibi alanlarda küçük harfe çevirip saklamak, sonraki karşılaştırmaları tutarlı hale getirir.
Karşılaştırma ve sıralama
İki metnin eşitliği karşılaştırılırken tip dönüşümüne izin verilmemelidir. Katı karşılaştırma hem daha hızlıdır hem de sayıya benzeyen metinlerde beklenmeyen eşleşmeleri önler. Sıralamada ise alfabetik sıra ile doğal sıra arasındaki fark önem kazanır: standart sıralama dosya2 ile dosya10 karşılaştırıldığında dosya10 değerini önce koyar.
// katı karşılaştırma
if ($girilen === $beklenen) { /* ... */ }
// doğal sıralama: dosya2, dosya10 doğru sırada gelir
natsort($dosyalar);
// Türkçe alfabetik sıralama
$c = new Collator('tr_TR');
$c->sort($isimler);Türkçe karakterlerin doğru sıralanması için Collator sınıfı kullanılır. Standart sıralama karakterleri kod değerine göre dizdiği için ç, ğ, ı gibi harfler listenin sonuna atılır.
Kontrol listesi
- Karakter sayısı gereken her yerde mb_ ile başlayan sürüm kullanılır.
- strpos sonucu katı karşılaştırmayla kontrol edilir.
- Sabit metin değişiminde düzenli ifade yerine str_replace tercih edilir.
- Kullanıcı girdisi trim edilerek alınır.
- Ekrana basılan her metin htmlspecialchars ile kaçırılır.
PHP eğitim serisi
Bu yazı, temel sözdiziminden üretim ortamına kadar ilerleyen 25 bölümlük serinin bir parçası. Bölümler sırayla okunacak biçimde hazırlandı, ancak her biri tek başına da kullanılabilir.
Temeller
- Kurulum ve temel sözdizimi
- Döngüler ve akış kontrolü
- Diziler
- Fonksiyonlar
- String fonksiyonları (bu yazı)
- Süper globaller
- Form işleme
- Dosya işlemleri
Dilin ayrıntıları
Nesne yönelimli PHP
- Sınıf ve nesne
- Kalıtım, arayüz ve trait
- Statik üyeler, sabitler ve enum
- Namespace, Composer ve autoload
Veri ve güvenlik
- PDO ile veritabanı işlemleri
- Oturum yönetimi ve kimlik doğrulama
- Güvenli çıktı ve XSS
- JSON ile veri değişimi
Dış dünya ve üretim
Yorumlar
İlk yorumu sen yap.
İlgili Yazılar

PHP Uygulamasını Üretime Almak: Yapılandırma ve Güvenlik
Geliştirme makinesinde çalışan kod ile üretimde güvenle çalışan kod arasındaki fark yapılandırmadır. Ayarlar, izinler, dağıtım akışı ve son kontroller.

PHP ile REST API Yazmak: Yönlendirme ve HTTP Durum Kodları
Bir API'nin kalitesi çoğunlukla ayrıntılarda belli olur: doğru durum kodu, tutarlı hata biçimi ve öngörülebilir adresler. Saf PHP ile uçtan uca kurulum.

PHPUnit ile Birim Test Yazmak: Kurulum, Sahte Nesneler ve Kapsam
Testin amacı hata bulmak değil, değişikliği güvenle yapabilmektir. Kurulum, ilk test, sahte nesneler ve test edilebilir kodun özellikleri.