Menu

PHP strlen(): Bayt ve Karakter Olarak Dizge Uzunluğu

strlen($string) bir dizgenin uzunluğunu bayt olarak, mb_strlen($string) ise karakter olarak döndürür. Japonca metin ve emojinin neden farklı yanıtlar verdiğini, boş bir dizgeyi nasıl kontrol edeceğinizi ve girdi uzunluğunu nasıl doğrulayacağınızı öğrenin.

Bu sayfada çalıştırılabilir editörler var - düzenle, çalıştır ve sonucu anında gör.

strlen($string) bir dizgenin uzunluğunu bayt olarak döndürür. Japonca metin, aksanlı harfler ve emoji için istediğiniz şey olan karakterler için mb_strlen($string) kullanın. Düz İngilizce metinde ikisi aynı sayıyı verir.

Boşluklar, noktalama işaretleri ve yeni satırların hepsi sayılır. strlen("a b\n") 4'tür.

UTF-8'de bayt ve karakter

PHP dizgeleri bayt dizileridir ve UTF-8 karakter başına farklı sayıda bayt kullanır: ASCII harfler ve rakamlar için 1, é veya ж gibi harfler için 2, kana, yaygın kanji, Çince karakterler ve € gibi semboller için 3, çoğu emoji ve 𠮷 gibi nadir kanji için 4. strlen() baytları toplar; mb_strlen() karakterleri sayar.

Baytlar önemli olduğunda strlen() kullanın: bayt olarak sınırlı bir veritabanı sütunu, bir dosya boyutu, ikili bir protokol. Bir insanın okuduğu her şey için mb_strlen() kullanın: bir karakter sayacı, "en fazla 20 karakter" kuralı, metni mb_substr() ile kesmek.

Emoji ve birkaç kod noktasından oluşan karakterler

mb_strlen() Unicode kod noktalarını sayar. Okuyucunun tek karakter olarak gördüğü bazı şeyler birleştirilmiş birkaç kod noktasıdır: bir aile emojisi, bir bayrak, bir ten rengi ya da bir harf ile birleşen bir aksan.

Okuyucunun tek karakter olarak gördüklerini (grafem kümeleri) saymak intl eklentisindeki grapheme_strlen() fonksiyonunu gerektirir:

echo grapheme_strlen('👨‍👩‍👧');   // 1
echo grapheme_strlen('🇯🇵');     // 1

Japonca bir formdaki karakter sayacı için mb_strlen() genellikle yeterlidir: her kana ve kanji tek bir kod noktasıdır.

mb_strwidth ile görüntü genişliği

Bir terminalde veya sabit genişlikli bir düzende tam genişlikte bir Japonca karakter iki sütun kaplarken yarım genişlikte bir katakana veya Latin harfi bir sütun kaplar. mb_strwidth() bu genişliği döndürür; Japonca "全角は2文字" kuralları genellikle bunu kasteder.

Bir dizgenin boş olup olmadığını kontrol etme

En açık test '' ile katı bir karşılaştırmadır. strlen($s) === 0 aynı yanıtı verir. empty($s) aynı değildir: birçok formda geçerli bir yanıt olan "0" dizgesi için de true döndürür.

Boşluklardan oluşan bir dizge boş değildir. Yalnızca boşlukların hiçbir şey sayılması gerekiyorsa önce trim() içinden geçirin.

strlen(null) ve dizge olmayanlar

strlen() bir dizge bekler. null vermek hâlâ 0 döndürür, ama PHP 8.1'den beri bir kullanımdan kaldırma bildirimi yazdırır:

Deprecated: strlen(): Passing null to parameter #1 ($string) of type string is deprecated in /home/index.php on line 2

Bir dizi TypeError: strlen(): Argument #1 ($string) must be of type string, array given fırlatır.

Değeri önce dönüştürün veya varsayılan verin, örneğin strlen($value ?? ''). Tam sayılar dizgeye çevrilir, bu yüzden strlen(12345) 5'tir. Dizi elemanlarını saymak için count() kullanın.

Kullanıcı girdisinin uzunluğunu doğrulama

Tipik bir kural: kırpıldıktan sonra 3 ile 16 karakter arası bir kullanıcı adı. Japonca bir ismin bayt olarak değil karakter olarak ölçülmesi için mb_strlen() kullanın.

mb_strlen() yerine strlen() ile やまだたろう 18 sayılır ve altı karakter olmasına rağmen çok uzun diye reddedilirdi.

Sıkça Sorulan Sorular

PHP'de bir dizgenin uzunluğunu nasıl alırım?

strlen($s) bayt sayısını, mb_strlen($s) karakter sayısını döndürür. Düz İngilizce metinde eşittirler; Japonca, aksanlı harfler veya emoji için mb_strlen() kullanın.

strlen() Japonca metin için neden yanlış uzunluk döndürüyor?

Yanlış değil, baytları sayıyor. UTF-8 kana ve yaygın kanji karakterlerini 3'er baytta saklar, bu yüzden strlen('日本語') 9 iken mb_strlen('日本語') 3'tür.

Emoji içeren bir dizgenin karakterlerini nasıl sayarım?

mb_strlen() Unicode kod noktalarını sayar, bu yüzden basit bir emoji 1 sayılır, ama birkaç kod noktasından oluşan bir emoji (bir aile, bir bayrak, bir ten rengi) daha fazla sayılır. intl eklentisindeki grapheme_strlen() okuyucunun tek karakter olarak gördüğünü sayar.

PHP'de strlen ile count arasındaki fark nedir?

strlen() bir dizgeyi ölçer, count() bir dizinin elemanlarını sayar. strlen() fonksiyonuna bir dizi vermek PHP 8'de bir TypeError fırlatır.

PHP'de bir dizgenin boş olup olmadığını nasıl kontrol ederim?

Boş bir dizgeyle karşılaştırın: $s === '' ya da strlen($s) === 0. Bunun için empty($s) kullanmaktan kaçının, çünkü "0" dizgesini de boş sayar.

Coddy programlama dilleri çizimi

Coddy ile kodlamayı öğren

BAŞLA