Test sunucuları ve barındırma PHP PCRE farklar

3 Cevap php

Benim test sunucusu üzerinde çalışıyor şu normal ifadeyi var, ama sadece benim barındırılan sunucu boş bir dize döndürür ettik.

$text = preg_replace('~[^\\pL\d]+~u', $use, $text);

Şimdi ben bu aşağı etkin Unicode özellik desteği ile derlenmiş olması değil PCRE'nin barındıran sunucu sürümü geliyor eminim. Aşağıdaki gibi iki versiyonu farklılıklar şunlardır:

Benim sunucu:

PCRE version 7.8 2008-09-05
Compiled with
UTF-8 support
Unicode properties support
Newline sequence is LF
\R matches all Unicode newlines
Internal link size = 2
POSIX malloc threshold = 10
Default match limit = 10000000
Default recursion depth limit = 10000000
Match recursion uses stack

Sunucu barındırma:

PCRE version 4.5 01-December-2003
Compiled with
UTF-8 support
Newline character is LF
Internal link size = 2
POSIX malloc threshold = 10
Default match limit = 10000000
Match recursion uses stack

Ayrıca sunucu barındırma (aynı sürüm PHP karşı derlenmiş) üzerindeki sürümü oldukça eski olduğunu unutmayın.

Ne beni karıştırıyor olsa da, pcretest ile komut satırından hem de sunucularda başarısız olduğunu

re> ~[^\\pL\d]+~u
** Unknown option 'u'

benim sunucu üzerinde PHP çalıştırdığınızda bu sıradanifade çalışıyor olmasına rağmen.

Yani, benim sorular düzenli ifade, çünkü Unicode özellikleri eksikliği sunucu barındırma başarısız oluyor sanırım? Ya Kaçırdığım başka bir şey var mı?

Thanks all, Gaz.

3 Cevap

PCRE 4.5 UTF-8 desteği yok ama bu tür \pL olarak Unicode özelliklerini desteklemez ve bunları sağlayan /u bayrağını desteklemiyor. Sürüm 5.0 veya sonraki bir sunucu üzerinde PCRE'yi yükseltmeniz gerekir. Ayrıca /u in preg_replace() için destek PHP yükseltmeniz gerekebilir.

Büyük olasılıkla, ana sunucu üzerinde PCRE UTF8 desteği etkin değil.

pcretest farklı seçenekler kullanır. Bu u 'yerine UTF-8 için' '8 bulunuyor. Bu hata nedeni budur.

Ayrıca, farklı PCRE kütüphaneler aynı makinede PHP'nin Apache veya CLI sürümlerinde kullanılabilir olduğunu unutmayın.

Sorularınızı cevaplamak için; evet, hem hayır. Ben UTF8 desteği mevcut olunca PCRE'nin 5.0 eşik olduğuna inanıyorum.