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ı.
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ü.
Hayır, onlar değil. Sorusunu preg_match and UTF-8 in PHP a> Örnek için bakınız.
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?