BBCode ile htmlentitiesi kullanma

2 Cevap

Ne elde etmek çalışıyorum bir ses BBCode kullanarak için bir yöntem, ancak diğer tüm veriler Htmlentities ile ayrıştırılır nerede () 'dir. Ben etrafta [] sembolleri patlayan çizgisinde düşünüyordum, bu mümkün olması gerektiğini düşünüyorum, ama daha iyi bir yolu olabilir düşündüm.

Herhangi bir fikir?

2 Cevap

BBCode'u ayrıştırma hakkında bir konu var:

http://stackoverflow.com/questions/488963/best-way-to-parse-bbcode

Eğer giriş kalanı ile ne yapabilirim daha BBCode'u ayrıştırmak eğer.

htmlentities() ayrıştırmak değildir. Aksine, bu encodes verileri güvenli bir şekilde bir HTML belgesinde görüntülenebilir böylece.

Kodunuzu aşağıdaki gibi görünecektir:

  1. (Bazı mekanizma ile) BB-kodu ayrıştırmak; Henüz, sadece etiketleri içine girdi metin ayrıştırmak kaçan yapmayın!
  2. Lütfen ayrıştırıcı adım çıktı blok etiketleri ve düz metin (etiketleri arasındaki metin) temsil düğümlerini temsil düğümden oluşan, bazı ağaç yapısı olacaktır.
  3. Çıkış biçimi (HTML) için ağaç Render. Bu noktada, htmlentities kullanarak veri yapısında plain text kaçarlar.

Sizin oluşturma işlevi özyinelemeli olacaktır. Ilişkiyi belirlemek Bazı pseudo-fonksiyonları:

render( x : plain text ) = htmlentities(x)

render( x : bold tag )   = "<b>" . render( get_contents_of ( x )) . "</b>"

render( x : quote tag )  = "<blockquote>" . 
                           render( get_contents_of( x )) .
                           "</blockquote>"

...

render( x : anything else) = "<b>Invalid tag!</b>"

Yani HTML için çıktı render yaparken htmlentities sadece oyuna giriyor, görmek, bu yüzden düz metin gibi özel karakterleri içeren gerekiyordu eğer tarayıcı karışık almaz < ve>. Eğer düz metin render olsaydı, örneğin, tüm işlev çağrısı kullanmak olmaz.