Yineleme kodu aşağıdaki parça gerekli midir?

2 Cevap php

İşte Kohana çerçevenin Input_Core sınıfının xss_clean yönteminden bir kod parçası:

do
{
 // Remove really unwanted tags
 $old_data = $data;
 $data = preg_replace('#</*(?:applet|b(?:ase|gsound|link)|embed|frame(?:set)?|i(?:frame|layer)|l(?:ayer|ink)|meta|object|s(?:cript|tyle)|title|xml)[^>]*+>#i', '', $data);
}
while ($old_data !== $data);

Do döngü sırasında gerekli ... mi? Ben preg_replace çağrı sadece bir tekrarda tüm çalışmaları yapmak düşünürdüm.

2 Cevap

Değiştirme potansiyel sonraki yineleme yeni oyunlar yaratır Evet, eğer gerekli. Olsa, en kötü sadece ve ek çek çünkü çok savurgan değil.

Bu maçlar kod giderek, o ancak, yerine yeni oyunlar yaratacak olası görünüyor: o maçlar ne çok sıkı bulunuyor.

EDIT: Daha spesifik olmak gerekirse, isteğe bağlı bir kapanış köşeli ayraç ve sonunda bir kapanış açılı ayraç olmayan semboller herhangi bir sayıyla birkaç anahtar sözcüklerinden biri tarafından izlenen bir çizgi izliyor açılış açılı ayraç eşleştirmeye çalışır. Giriş o sözdizimi izler varsa, yutulmak olacak. De (örneğin birden çok açılış ve kapanış köşeli) biçimlendirilmiş ise artık ilk sırasını eşleşen alt dizeleri bulamıyorum kadar, o çöp elde edersiniz.

Yani, hayır. Eğer <<iframe>iframe> gibi bir kod yoksa, hiçbir şeyin tekrarı gereklidir. Ama sonra regex (örn. bu ekstra boşluk ile < iframe> üzerinde başarısız olur) için zaten yeterince iyi değil etiket çorba düzeyi ile uğraşıyoruz.

EDIT2: Bu desen zero or more (sıfır veya bir olmalıdır) etiketinin başında bölü uyduğunu da biraz garip. Benim regex bilgi çok paslı değilse Ve, son *+ (yıldız sıfır ya da daha fazla gelir ya çok mantıklı değil, artı bir ya da daha fazla, belki bir açgözlü sözdizimi ya da fantezi bir şey demek böyle?).

Tamamen alakasız bir konuda, ben burada optimizasyonu bir kelime eklemek istiyorum.

preg_replace () yerine (başvuru tarafından geçirilen 5 argüman, bakınız) yapılmış ya da olup olmadığını söyleyebilirim. Onlar büyük, özellikle de çok çok verimli dizeleri karşılaştırarak daha bulunuyor.