Php bir biçimlendirme ayrıştırıcı Bina

4 Cevap php

Ben php çok basit bir biçimlendirme ayrıştırıcı oluşturduk. Ancak, şu anda biçimlendirme ve html arasında geçiş yapmak için str_replace kullanır. Nasıl içeriği olan bir tür "kod" kutusu (sonunda GeSHi kullanacağız) dokunulmaz yapabilir?

Şu anda, aşağıdaki biçimlendirme: [code][b]Some bold text[/b][/code] <b>Some bold text</b> ile kod kutusu olarak ayrıştırma rüzgarlar.

Ben bazı tavsiyeler, en iyi seçenek olduğunu ihtiyacınız var?

  • Tek tek her kelimeyi kontrol, ve bir [code] içeride değilse o ayrıştırmak gerekir kutu var
  • Olduğu gibi bırakın, kullanıcılar [code] içinde biçimlendirme göndermek mümkün olsun.
  • Özellikle HTML biçimlendirme için kod kutusunun başka bir türü oluşturma, [kodu] herhangi autorevert < veya> [ve].

Hatta belki başka bir seçenek var mı? Bu ben bunun olacağını düşündüm biraz daha sert olduğunu ...

EDIT: Bu çözümleyici bir kod kutusu türü bir şey eklemeden bile değer mi? Yani, ben bunun yararlı olabileceğini görmek, ama küçük bir sonuç için çaba oldukça büyük bir miktardır.

4 Cevap

Sen str_replace kullanarak amaçları için birden dizeleri içine yıkmak olabilir. [Code] üzerine dizeleri ve [/ code] etiketleri bölünmüş - ayrı bir dizesinde kodu kutusunu tasarrufu. Bu şekilde özgün dize nereye gitti not edin. Sonra orijinal dize str_replace kullanımı ve kod kutusu dize üzerinde ne gibi ayrıştırma yapmak. Son olarak ayrıştırılır kodu kutuları ve ekran takın.

Uyarı sadece bir kelime olsa da, ekran için html içine girdi dönüm doğal olarak tehlikeli olarak beni vurur. Ben tekrar görüntülemek için html dönüştürmeden önce girdi sanitasyonuyla ve denetimi büyük miktarda tavsiye ederim.

Neden tekerleği yeniden icat istiyorsunuz?

markup parsers zaten bol miktarda var.

Her neyse, sadece str_replace pek yardımcı olmayacaktır. Düzenli ifadeler öğrenmek zorunda ve dedikleri gibi, now you've got two problems ;) ediyorum

HTML beautifier çok tatlı. http://pear.php.net/package/PHP_Beautifier. De muhtemelen sizin ihtiyaçlarınıza uygun olacağı bir dekoratör sınıf var.

Açık olmak gerekirse, senin sorunun iki kısımdan oluşmaktadır. Ilk bölümü için anahtar kelimeleri içine "kod" kırmak için bir sözel çözümleyici için ihtiyaçtır "dil." Eğer bir kelime analizörü var, daha sonra bir ayrıştırıcı gerekir. Bir ayrıştırıcı sizin dilinizde bir-at-a-zaman mantıksal (genellikle recursive-iniş yolu) tarzda için anahtar kelimeleri kabul kodudur.