PHP preg_functions Çokbaytlı güvenli mi?

5 Cevap php

PHP hiçbir Çokbaytlı 'gebelik' fonksiyonları vardır, böylece varsayılan preg_functions tüm mb güvenli demek? Php belgelerde herhangi bir söz bulamadı.

5 Cevap

PCRE UTF-8 ve diğer Unicode kodlamaları destekler, ancak derleme zamanında belirtilmesi vardır. Kimden man page for PCRE 8.0:

PCRE'nin mevcut uygulama UTF-8 kodlanmış dizeleri ve Unicode genel kategori özellikleri için destek dahil Perl 5.10, yaklaşık gelir. Ancak, UTF-8 ve Unicode desteği açıkça etkinleştirilmelidir; Bu varsayılan değildir. Unicode tablolar Unicode karşılık 5.1 bırakın.

PHP şu anda kullandığı {[(0)];} Sistem eski bir sürüm olabilir.

PCRE lib o PHP 5.2 ile birlikte gelen bir göz attığınızda, o Unicode özelliklerini ve UTF-8 desteklemek üzere yapılandırılmış görünür. Aynı için 5.3 branch.

pcre, kutudan utf8 destekler 'u' değiştirici için belgelerine bakın.

İllüstrasyon (xa4 Alman harf için utf8 kodlama \ XC3 \ "ä")

  echo preg_replace('~\w~', '@', "a\xC3\xA4b");

"\ XC3" ve "\ xa4" belirgin sembolü olarak kabul edildi, çünkü bu "@ @ @ ¤" yankıları

  echo preg_replace('~\w~u', '@', "a\xC3\xA4b");

Baskılar ('u' notu) "@ @ @" "XC3 xa4 \ \" tek bir harf olarak tedavi edildi çünkü.

Benim daha karmaşık gebelik fonksiyonları bazıları:

(1a) alfanümerik + çizgi olarak adını doğrulamak:

preg_match('/^[A-Za-z][A-Za-z0-9]*(?:_[A-Za-z0-9]+)*$/',$username)

(1b) mümkün UTF alternatif:

preg_match('/^[A-Za-z][A-Za-z0-9]*(?:_[A-Za-z0-9]+)*$/u',$username)

(2a) e-posta doğrulamak:

preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix",$email))

(2b) mümkün UTF alternatif:

preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ixu",$email))

(3a) satırsonlarını normalleştirmek:

preg_replace("/(\n){2,}/","\n\n",$str);

(3b) mümkün UTF alternatif:

preg_replace("/(\n){2,}/u","\n\n",$str);

Thse değişiklikler iyi görünüyor muyum?