PHP'de metin (string) dört yolla yazılır: tek tırnak, çift tırnak, heredoc ve nowdoc. Tek tırnak içinde değişkenler ve \n gibi kaçış dizileri işlenmez; çift tırnak ve heredoc içinde ise değişkenler değerleriyle yer değiştirir. En sık kullanılan string fonksiyonları şunlardır: içerik kontrolü için str_contains(), str_starts_with(), str_ends_with(); konum bulmak için strpos(); parça almak için substr(); değiştirmek için str_replace(); bölmek ve birleştirmek için explode() ile implode(); boşluk temizlemek için trim().

Bu yazıda tırnak türlerinin farkını, metin içine değişken yazmayı (interpolation), heredoc ve nowdoc yazımını ve temel fonksiyonları çalıştırılmış örneklerle anlatıyoruz. Bilmeniz gereken en önemli ayrıntı şu: PHP'de bir string bayt dizisidir ve bu fonksiyonların çoğu baytlarla çalışır. Türkçe karakterler UTF-8'de birden fazla bayt tuttuğu için uzunluk ve büyük harf dönüşümü gibi işlerde mbstring fonksiyonları gerekir. Örnekler PHP 8.5.12 ile çalıştırıldı. Serinin tamamı için PHP öğrenme rehberi sayfasına bakabilirsiniz.

Tek tırnak ve çift tırnak farkı

Tek tırnak ve çift tırnak farkı

Tek tırnaklı metin en basit yazımdır. İçinde yalnızca iki kaçış dizisi tanınır: tek tırnağın kendisi için \' ve ters bölü için \\. Başka her ters bölü olduğu gibi yazdırılır ve değişken adları metin olarak kalır. Çift tırnaklı metinde ise \n (yeni satır), \t (sekme), \$ (dolar işareti), \" (çift tırnak) gibi kaçış dizileri ve \u{...} biçiminde Unicode kod noktaları işlenir; en önemlisi, değişkenler değerleriyle değiştirilir.

php
<?php
$ad = 'Deniz';
echo 'Merhaba $ad\n', PHP_EOL;  // çıktı: Merhaba $ad\n
echo "Merhaba $ad\n";        // çıktı: Merhaba Deniz
echo 'It\'s ok, yol: C:\\dosyalar', PHP_EOL; // çıktı: It's ok, yol: C:\dosyalar
echo "Sekme:\t| Dolar: \$ad | Unicode: \u{e7}", PHP_EOL;
// çıktı: Sekme:	| Dolar: $ad | Unicode: ç

\u{e7} kaçış dizisi, kod noktası U+00E7 olan ç harfini UTF-8 baytları olarak metne yazar; süslü parantezler zorunludur. Kılavuz ayrıca çift tırnak içinde tanınmayan bir karakteri kaçırmaya çalışırsanız ters bölünün de yazdırılacağını belirtir. İki tırnak türü arasında seçim yaparken kural basittir: Metnin içine değişken veya özel karakter koymayacaksanız tek tırnak, koyacaksanız çift tırnak kullanın.

Metin içine değişken yazmak (interpolation)

Çift tırnaklı metinde ve heredoc içinde bir $ işareti görüldüğünde, ardından gelen ve değişken adında kullanılabilen karakterler değişken adı olarak yorumlanır. Basit yazım tek bir değişkeni, bir dizi elemanını veya bir nesne özelliğini gömmeye yeter. Daha karmaşık ifadeler için süslü parantezli yazım kullanılır: İfade metnin dışında nasıl yazılıyorsa öyle yazılır ve { ile } arasına alınır. Kılavuza göre bu yazım yalnızca $ işareti { karakterinin hemen ardından geldiğinde tanınır; { $degisken} gibi arada boşluk varsa çalışmaz.

php
<?php
$urun = ['ad' => 'Laptop', 'fiyat' => 32000];
$adet = 2;
class Musteri { public string $ad = 'Ece'; public array $etiket = ['vip']; }
$m = new Musteri;

echo "Ürün: $urun[ad]", PHP_EOL;               // çıktı: Ürün: Laptop
echo "Fiyat: {$urun['fiyat']} TL", PHP_EOL;     // çıktı: Fiyat: 32000 TL
echo "Müşteri: $m->ad / {$m->etiket[0]}", PHP_EOL; // çıktı: Müşteri: Ece / vip
echo "{$adet}x sipariş", PHP_EOL;              // çıktı: 2x sipariş
echo "Toplam: " . $urun['fiyat'] * $adet . " TL", PHP_EOL; // çıktı: Toplam: 64000 TL

Dördüncü satırda süslü parantez şart: "$adetx" yazsaydınız PHP $adetx adlı bir değişken arardı. Tırnaklı dizi anahtarları ($urun['fiyat']) de ancak süslü parantez içinde çalışır. Metin içinde hesaplama veya fonksiyon çağrısı yapılamaz; son satırdaki gibi birleştirme operatörüyle dışarıda hesaplamanız gerekir.

Heredoc ve nowdoc: çok satırlı metin

Heredoc yazımı <<< işaretiyle başlar, ardından bir tanımlayıcı ve yeni satır gelir; metin, aynı tanımlayıcı tekrar yazılınca biter. Heredoc çift tırnak gibi davranır: Değişkenler ve kaçış dizileri işlenir, ama içinde çift tırnağı kaçırmanız gerekmez. PHP 7.3'ten beri kapanış tanımlayıcısı girintili yazılabilir; kapanıştaki girinti kadar boşluk her satırın başından silinir. Bu sayede heredoc'u kodun girintisine uydurabilirsiniz. Kapanış satırı gövdedeki herhangi bir satırdan daha içeride olursa ParseError oluşur ve girintide sekme ile boşluk karıştırılamaz.

Nowdoc ise heredoc'un tek tırnaklı karşılığıdır. Tanımlayıcı tek tırnak içine yazılır (<<<'KOD') ve içerikte hiçbir değişken veya kaçış dizisi işlenmez. Kılavuz, nowdoc'un PHP kodu veya kaçırma gerektirmeden büyük metin blokları gömmek için ideal olduğunu belirtir.

php
<?php
$ad = 'Mert';
$tutar = 1250;
$mail = <<<METIN
    Sayın $ad,
    {$tutar} TL tutarındaki ödemeniz alındı.
      (Bu satır 2 boşluk içeride kalır.)
    METIN;
echo $mail, PHP_EOL;

$sablon = <<<'KOD'
Değişken yazımı: $ad ve {$tutar} olduğu gibi kalır.
KOD;
echo $sablon, PHP_EOL;
text
Sayın Mert,
1250 TL tutarındaki ödemeniz alındı.
  (Bu satır 2 boşluk içeride kalır.)
Değişken yazımı: $ad ve {$tutar} olduğu gibi kalır.

Kapanış tanımlayıcısı METIN; dört boşlukla girintili olduğu için her satırın başından dört boşluk silindi; altı boşlukla başlayan satırda iki boşluk kaldı. Tanımlayıcı adları PHP etiket kurallarına uyar: harf, rakam ve alt çizgiden oluşur ve rakamla başlayamaz.

Birleştirme: nokta operatörü

PHP'de metinler nokta (.) operatörüyle birleştirilir; .= bir metnin sonuna ekleme yapar. Kılavuz, toplama operatörü + ile metin birleştirilemeyeceğini özellikle belirtir. Sayısal olmayan iki metni toplamaya çalışırsanız PHP 8.5.12 Unsupported operand types: string + string mesajlı bir TypeError fırlatır.

php
<?php
$s = 'PHP';
$s .= ' 8';
$s = $s . '.5';
echo $s, PHP_EOL;            // çıktı: PHP 8.5
echo 'Sayı: ' . 3 + 4, PHP_EOL; // çıktı: Sayı: 7

Son satır PHP 8.0'daki bir öncelik değişikliğini gösteriyor. PHP 8.0'ın uyumsuzluk notlarına göre birleştirme operatörünün önceliği toplama ve çıkarmaya göre değişti: Önceden ('Sayı: ' . 3) + 4 olarak yorumlanan ifade artık 'Sayı: ' . (3 + 4) olarak yorumlanıyor. Yine de okunabilirlik için böyle ifadelerde parantez kullanmanız iyi olur. Operatör önceliğinin tamamı için PHP operatörler ve öncelik yazısına bakın.

İçerik kontrolü: str_contains, str_starts_with, str_ends_with

İçerik kontrolü: str_contains, str_starts_with, str_ends_with

PHP 8.0 ile gelen bu üç fonksiyon, bir metnin başka bir metni içerip içermediğini, onunla başlayıp başlamadığını ve onunla bitip bitmediğini doğrudan bool olarak döndürür. Üçü de büyük/küçük harfe duyarlıdır ve ikili veriyle (binary safe) güvenle çalışır. Kılavuzun örneklediği bir ayrıntı: Aranan metin boş string ise sonuç her zaman true olur.

php
<?php
$dosya = 'rapor-2026.PDF';
var_dump(str_contains($dosya, '2026'));                // bool(true)
var_dump(str_starts_with($dosya, 'rapor'));            // bool(true)
var_dump(str_ends_with($dosya, '.pdf'));               // bool(false) harf duyarlı
var_dump(str_ends_with(strtolower($dosya), '.pdf'));   // bool(true)
var_dump(str_contains($dosya, ''));                    // bool(true)

Boş metin kuralı, kullanıcıdan gelen bir arama kelimesini doğrudan str_contains() fonksiyonuna verdiğinizde önem kazanır: Kullanıcı boş arama yaparsa her kayıt "eşleşmiş" görünür. Aramadan önce trim($aranan) === '' kontrolü yapmak bu sorunu önler. Kalıp tabanlı arama gerekiyorsa preg_match ve regex yazısına bakın.

Konum bulmak ve parça almak: strpos ve substr

strpos() aranan metnin ilk geçtiği konumu sıfırdan başlayan bir tam sayı olarak döndürür, bulamazsa false döndürür. Kılavuzdaki uyarı burada da geçerlidir: Konum 0 olabileceği için sonucu === false veya !== false ile kontrol edin. stripos() harf duyarsız arama yapar, strrpos() son geçtiği konumu bulur.

php
<?php
$eposta = 'destek@ornek.com';
$at = strpos($eposta, '@');
echo substr($eposta, 0, $at), PHP_EOL;  // çıktı: destek
echo substr($eposta, $at + 1), PHP_EOL;  // çıktı: ornek.com
var_dump(strpos($eposta, 'x'));           // bool(false)
var_dump(stripos('Merhaba PHP', 'php'));  // int(8)
var_dump(strrpos('a.b.c', '.'));          // int(3)

substr($metin, $baslangic, $uzunluk) parça alır. Başlangıç negatifse sondan sayılır; uzunluk negatifse sondan o kadar karakter dışarıda bırakılır; uzunluk verilmezse veya null ise metnin sonuna kadar alınır. Kılavuzun değişiklik tablosuna göre PHP 8.0'dan beri fonksiyon, daha önce false döndürdüğü durumlarda boş metin döndürür.

php
<?php
$s = 'abcdef';
echo substr($s, 1), PHP_EOL;     // çıktı: bcdef
echo substr($s, 1, 3), PHP_EOL;  // çıktı: bcd
echo substr($s, -2), PHP_EOL;    // çıktı: ef
echo substr($s, 0, -1), PHP_EOL; // çıktı: abcde
var_dump(substr($s, 10));        // string(0) ""
echo $s[0], $s[-1], PHP_EOL;     // çıktı: af

Son satır, köşeli parantezle tek karakter okumayı gösteriyor; PHP 7.1'den beri negatif konumlar da desteklenir. Kılavuz bu erişimin bayt bazında olduğunu ve çok baytlı metinlerde güvenli olmadığını vurgular: 'ğ' iki bayt tuttuğu için $s[0] yalnızca ilk baytı verir. Aynı şey substr() ve strpos() için de geçerlidir; Türkçe metinde karakter bazında kesmek için mb_substr() kullanılır.

Değiştirmek: str_replace ve sıralama tuzağı

str_replace($ara, $yerine, $metin) aranan metnin tüm geçişlerini değiştirir. Arama ve değiştirme değerleri dizi olabilir; bu durumda elemanlar eşleşen sırayla kullanılır. Değiştirme dizisi aramadan kısaysa eksik kalanlar için boş metin kullanılır. Dördüncü parametre referansla alınır ve yapılan değiştirme sayısını verir. str_ireplace() aynı işi harf duyarsız yapar.

php
<?php
echo str_replace('dünya', 'PHP', 'Merhaba dünya'), PHP_EOL;
// çıktı: Merhaba PHP
echo str_replace(['{ad}', '{gun}'], ['Ayla', 'Cuma'], 'Sayın {ad}, randevunuz {gun} günü.'), PHP_EOL;
// çıktı: Sayın Ayla, randevunuz Cuma günü.
echo str_ireplace('php', 'PHP', 'php ve Php'), PHP_EOL; // çıktı: PHP ve PHP
str_replace(' ', '', 'a b c d', $adet);
echo "$adet boşluk silindi", PHP_EOL; // çıktı: 3 boşluk silindi

echo str_replace(['A', 'B'], ['B', 'C'], 'A'), PHP_EOL;  // çıktı: C
echo strtr('A', ['A' => 'B', 'B' => 'C']), PHP_EOL; // çıktı: B

Son iki satır, kılavuzun "değiştirme sırası tuzağı" dediği durumu gösteriyor. str_replace() dizi elemanlarını soldan sağa tek tek uygular: Önce A, B olur; ardından ikinci kural bu yeni B'yi C'ye çevirir. Değiştirilmiş metnin tekrar değiştirilmesini istemiyorsanız strtr() fonksiyonuna dizi verebilirsiniz; strtr() her konumda yalnızca bir kez değiştirme yapar ve sonuç B olur.

Bölmek ve birleştirmek: explode ve implode

explode($ayirici, $metin, $limit) metni ayırıcıdan böler ve parçaları dizi olarak döndürür. Pozitif limit verilirse en fazla o kadar eleman döner ve son eleman metnin geri kalanını içerir; negatif limitte sondan o kadar eleman atılır. Ayırıcı metnin başında veya sonundaysa, ya da iki ayırıcı yan yanaysa dizide boş metin elemanları oluşur. PHP 8.0'dan beri boş ayırıcı ValueError fırlatır. implode($ayirici, $dizi) ise ters işlemi yapar.

php
<?php
$csv = 'Ankara,İzmir,,Bursa';
print_r(explode(',', $csv));
print_r(explode(',', $csv, 2));
print_r(explode(',', $csv, -2));
echo implode(' | ', ['a', 'b', 'c']), PHP_EOL; // çıktı: a | b | c
var_dump(explode(',', ''));
text
Array
(
    [0] => Ankara
    [1] => İzmir
    [2] => 
    [3] => Bursa
)
Array
(
    [0] => Ankara
    [1] => İzmir,,Bursa
)
Array
(
    [0] => Ankara
    [1] => İzmir
)
a | b | c
array(1) {
  [0]=>
  string(0) ""
}

Son çıktı sık gözden kaçar: Boş bir metni bölmek boş dizi değil, tek elemanı boş metin olan bir dizi döndürür. Bölünecek değer boş olabilecekse sonucu array_filter() ile temizleyebilir ya da bölmeden önce kontrol edebilirsiniz. implode() için kılavuz, PHP 8.0'dan beri ayırıcının dizinin arkasına yazıldığı eski imzanın desteklenmediğini belirtir; ayırıcı her zaman ilk argümandır. Gerçek CSV dosyalarında tırnaklı alanlar olabileceği için explode() yerine fgetcsv() gibi CSV fonksiyonlarını kullanabilirsiniz; bu konu PHP dosya okuma ve yazma yazısında.

Temizlemek: trim, ltrim, rtrim

trim() metnin başındaki ve sonundaki boşluk karakterlerini siler: normal boşluk, sekme, yeni satır, satır başı, NUL baytı ve dikey sekme. ltrim() yalnızca baştan, rtrim() yalnızca sondan siler. İkinci parametreye silinecek karakterleri tek tek yazabilir, .. ile bir karakter aralığı belirtebilirsiniz. Bu parametre bir alt metin değil, bir karakter kümesidir.

php
<?php
var_dump(trim("  merhaba \n"));          // string(7) "merhaba"
var_dump(ltrim('0001250', '0'));           // string(4) "1250"
var_dump(rtrim('1,2,3,', ','));            // string(5) "1,2,3"
var_dump(trim('[etiket]', '[]'));          // string(6) "etiket"
var_dump(trim("\x01\x02veri\x1F", "\x00..\x1F")); // string(4) "veri"

Son örnek, 0 ile 31 arasındaki tüm ASCII kontrol karakterlerini aralık yazımıyla temizliyor. Karakter kümesi mantığını unutmamak önemlidir: trim('Hello World', 'Hdle') kılavuzdaki örnekte 'o Wor' döndürür, çünkü baştaki ve sondaki H, e, l ve d harflerinin tümü tek tek silinir.

Büyük/küçük harf, dolgu ve diğer yardımcılar

Büyük/küçük harf, dolgu ve diğer yardımcılar: İçeriyor mu, İle başlıyor / bitiyor mu, İlk konum, Parça alma

strtolower(), strtoupper(), ucfirst(), lcfirst() ve ucwords() harf dönüşümü yapar. Kılavuzun değişiklik tablosu ve PHP 8.2 uyumsuzluk notları, bu fonksiyonların PHP 8.2'den beri yerel ayardan (locale) bağımsız olduğunu ve yalnızca ASCII harfleri dönüştürdüğünü belirtir. Türkçe karakterler bu yüzden olduğu gibi kalır:

php
<?php
echo strtoupper('istanbul'), PHP_EOL;  // çıktı: ISTANBUL
echo strtoupper('çiğdem'), PHP_EOL;    // çıktı: çIğDEM
echo ucwords('ahmet can yılmaz'), PHP_EOL; // çıktı: Ahmet Can Yılmaz
echo strlen('ağaç'), PHP_EOL;          // çıktı: 6 (bayt)
echo mb_strlen('ağaç'), PHP_EOL;       // çıktı: 4 (karakter)
echo mb_strtoupper('çiğdem'), PHP_EOL; // çıktı: ÇIĞDEM

strtoupper('istanbul') sonucunun ISTANBUL olduğuna dikkat edin: Türkçede beklenen İSTANBUL değil, çünkü fonksiyon yalnızca ASCII i harfini ASCII I harfine çevirir. Türkçe metinlerde doğru sonuç için mbstring ve Türkçe büyük/küçük harf kuralları mbstring ve Türkçe karakter yazısında ayrıntılı ele alınıyor.

php
<?php
echo str_pad('42', 6, '0', STR_PAD_LEFT), PHP_EOL;          // çıktı: 000042
echo str_pad('Title', 11, '-', STR_PAD_BOTH), '|', PHP_EOL; // çıktı: ---Title---|
echo str_pad('Başlık', 12, '-', STR_PAD_BOTH), '|', PHP_EOL; // çıktı: --Başlık--|
echo str_repeat('=', 10), PHP_EOL;                  // çıktı: ==========
echo strrev('kitap'), PHP_EOL;                        // çıktı: patik
echo substr_count('elma, armut, elma, kiraz', 'elma'), PHP_EOL; // çıktı: 2

str_pad() uzunluğu da bayt cinsinden hesaplar: 'Başlık' altı karakter ama sekiz bayt olduğu için 12 uzunluğa tamamlanırken yalnızca dört tire eklendi. PHP 8.0'dan beri dolgu metni boşsa str_pad(), negatif tekrar sayısında da str_repeat() ValueError fırlatır. Sayıları biçimlendirmek için sprintf() ve number_format() daha uygundur; sprintf ve number_format yazısına bakın. HTML'e yazdıracağınız metinleri kaçırmak ise filter_var ve htmlspecialchars yazısının konusu.

İşFonksiyonDönüş / not
İçeriyor mustr_contains($m, $a)bool, PHP 8.0
İle başlıyor / bitiyor mustr_starts_with / str_ends_withbool, PHP 8.0
İlk konumstrpos($m, $a)int veya false, === ile kontrol
Parça almasubstr($m, $bas, $uz)string, negatif değer sondan sayar
Değiştirmestr_replace($ara, $yeni, $m)Dizi kabul eder, soldan sağa uygular
Bölme / birleştirmeexplode / implodeBoş ayırıcı ValueError
Kenar temizlemetrim / ltrim / rtrimİkinci parametre karakter kümesi
Harf dönüşümüstrtolower / strtoupper / ucfirstYalnızca ASCII, PHP 8.2
Uzunlukstrlen($m)Bayt sayısı; karakter için mb_strlen

Küçük uygulama: dağınık bir metni ayrıştırmak

Aşağıdaki örnek, anahtar=değer çiftlerinden oluşan ve boşlukları düzensiz bir metni bir diziye çeviriyor. Önce noktalı virgülden bölüyor, her parçayı temizliyor, boş ya da eşittir içermeyen parçaları atlıyor, sonra her parçayı ilk eşittir işaretinden ikiye ayırıyor. explode() çağrısındaki 2 limiti, değerin içinde başka bir eşittir işareti olsa bile değerin bölünmemesini sağlar.

php
<?php
$ham = " ad = Ayşe Kaya ; email= AYSE@ORNEK.COM ;sehir=Ankara ; ";
$kayit = [];
foreach (explode(';', $ham) as $parca) {
    $parca = trim($parca);
    if ($parca === '' || !str_contains($parca, '=')) {
        continue;
    }
    [$anahtar, $deger] = explode('=', $parca, 2);
    $kayit[trim($anahtar)] = trim($deger);
}
$kayit['email'] = strtolower($kayit['email']);
print_r($kayit);
echo "Kullanıcı adı: " . substr($kayit['email'], 0, strpos($kayit['email'], '@')), PHP_EOL;
/* çıktı:
Array
(
    [ad] => Ayşe Kaya
    [email] => ayse@ornek.com
    [sehir] => Ankara
)
Kullanıcı adı: ayse
*/

E-posta adresini küçük harfe çevirmek için strtolower() burada güvenle kullanılabildi, çünkü adres yalnızca ASCII karakterlerden oluşuyor. Ad alanında aynı işi yapsaydınız Türkçe harfler dönüşmezdi. Gerçek bir uygulamada e-posta adresini ayrıca filter_var() ile doğrulamanız gerekir.

Sık yapılan hatalar

  • strpos sonucunu if ($konum) ile kontrol etmek: Metin baştaysa konum 0'dır ve koşul yanlış olur; !== false veya str_contains() kullanın.
  • Türkçe metinde strlen ve strtoupper kullanmak: Bayt sayar ve yalnızca ASCII harfleri dönüştürür; mb_ fonksiyonlarına geçin.
  • Metni + ile birleştirmek: PHP'de birleştirme operatörü noktadır; + sayısal toplama yapar.
  • Tek tırnak içinde \n beklemek: Tek tırnakta kaçış dizileri ve değişkenler işlenmez.
  • trim'in ikinci parametresini alt metin sanmak: Parametre bir karakter kümesidir; her karakter ayrı ayrı silinir.
  • str_replace dizilerinde sırayı hesaba katmamak: Önceki değiştirmenin sonucu sonraki kurala yakalanabilir; gerekirse strtr() kullanın.

Sık Sorulan Sorular

Tek tırnak çift tırnaktan daha hızlı mı?

PHP kılavuzu iki tırnak türü arasında bir hız karşılaştırması vermez; aralarındaki fark davranıştadır. Tek tırnak değişken ve kaçış dizilerini işlemez, çift tırnak işler. Seçimi metnin içeriğine göre yapın ve projede tutarlı bir stil izleyin.

PHP'de bir metnin uzunluğunu nasıl bulurum?

strlen() bayt sayısını verir. Yalnızca ASCII içeren metinlerde bu, karakter sayısına eşittir. Türkçe karakter içeren UTF-8 metinlerde karakter sayısı için mb_strlen() kullanın; örneğin strlen('ağaç') 6, mb_strlen('ağaç') 4 döndürür.

str_contains hangi sürümden beri var?

str_contains(), str_starts_with() ve str_ends_with() PHP 8.0 ile geldi. Daha eski sürümlerde aynı kontrol strpos($metin, $aranan) !== false ile yapılırdı. Projenizin hangi PHP sürümünde çalıştığını php -v ile kontrol edebilirsiniz; komut satırı kullanımı için PHP CLI yazısına bakın.

Bir metni karakter karakter nasıl gezerim?

Yalnızca ASCII metinlerde for döngüsü ve $metin[$i] erişimi yeterlidir. UTF-8 metinde bu yöntem çok baytlı karakterleri böler; bunun yerine mb_str_split() ile metni karakter dizisine çevirip foreach ile gezebilirsiniz. Ayrıntılar mbstring yazısında.

Marka adları sahiplerine aittir. Bu yazı bağımsız bir teknik rehberdir; adı geçen kuruluşlarla bayilik veya ortaklık ilişkisi bulunduğu anlamına gelmez.

İlgili içerikler: PHP öğrenme rehberi · mbstring ve Türkçe karakter · sprintf, printf ve number_format · preg_match ve regex · Eşitlik ve karşılaştırma