PHP vBulletin'in BB Kod Ayrıştırma

5 Cevap php

Ben standart bir HTML biçimlendirmesi içine Powered BB kodu ayrıştırır bir işlevi istiyorum.

Ben PEAR ile yaygara ya da bu uygulamanın every örneği üzerinde bir PECL eklentisini yüklemek mümkün olmasına bağlıdır zorunda istemiyorum çünkü, PEAR kütüphanesi veya PECL eklentisini kullanmadan. Hedeftir zero dependencies. Ben PEAR uzantısı için kaynak kodunu bulmak ve bu değişiklik olabilir eğer iyi olurdu, ama ben mümkün gibi görünüyor.

Ben yaşıyorum özellikle sorun uyan [quote=My Name]. Edilir Adı 'My Name' şey tarafından içine değil ve boşluk içerebilir.

5 Cevap

Peki, PEAR package ve ek PECL extension Bunu da çok, (ZF gevşek bağlı kullanmak çok kolaydır Zend_Markup hangi adında bir Zend Framework Paketi var Sadece bu bileşen) kullanmayı tercih edebilirsiniz. Epeyce sınıfları PHP Classes Orada da bitti.

Bunu yapmanın tek yolu kullanmak olacaktır http://www.christian-seiler.de/projekte/php/bbcode/index_en.html

Proje sayfası da benzer çalışmalar için bağlantılar içerir; Bunu bir sevmiyorum bile bunlardan biri yararlı olabilir.

Ben sadece PEAR uzantısı uyum göstermektedir. Diğer PEAR kütüphaneleri bağımlılıkları yoktur, bu yüzden oldukça basit olmalıdır.

Düzenli ifade kullanarak zor yollarından biri:

$text = "[quote=my name]something.
[b]bla[b]
blabla.[/quote]";
$search = "/\[quote=(?>([a-z0-9]*))\](.*)\[/quote\]/is";
$replace = "From <i>$1</i>: <q>$2</q>";
$return_text = preg_replace($search, $replace, $text);

echo nl2br($return_text);

/*
From <i>my name</i>: <q>something.
[b]bla[b]
blabla.</q>
*/

Ben sadece, çünkü bu konuda felaket backtracking şans zor söylüyorlar '(. *)', Özellikle uzun metin ve çatlaklardan kayma bazı maçları bir şans. Yani, doğru regex bulmak için kaynağına düz gitmek isteyebilirsiniz: http://www.bbcode.org/implementations.php (bkz: Simple and Complex BBCode with PHP regex için, phpBBCode Sourcecode için). Alternatif olarak, çoğaltmak ve burada Pear en çözümleyici Sourcecode üzerine inşa: http://svn.php.net/viewvc/pear/packages/HTML_BBCodeParser

(Intro: 5 yıl Powered gelişmekte)

vBulletin'in çözümleyici en düzenli orada ifadeler veya drop-in-kütüphaneleri ile karşılaştırıldığında (muhtemelen gereksiz?) oldukça karmaşıktır. Onlar biraz farklı şeyler yapmak eğilimindedir beri dürüst sadece bunun kazmak ve ne yapabileceğinize alırdım. Eğer onlar gerçekten oluşturmak nasıl / kendilerini ayrıştırmak görmek zorunda kalmadan bir çalışma mükemmel ayrıştırıcı var eğer ben şaşıracaksınız.

Eski veriler ise, sadece kendi yazmak isteyebilirsiniz, ama eski ve veri gelen yeni ise, neden sadece vBulletin tarafında önbelleğe sahip ve üretmek ne kullanmak değil mi? Ya da sadece doğrudan vB_BbCode_Parser sınıfını kullanın ...

Umarım bu yardımcı olur.