PHP ile Özel Etiketler Ayrıştırma

5 Cevap php

Benim app özel şablonlar izin basit özel etiketler yapmaya çalışıyorum. Ama ayrıştırmak ve etiketleri değiştirmek için nasıl anlamaya olamaz.

(Örnek)

<div class="blog">
<module display="posts" limit="10" show="excerpt" />
</div>
<div class="sidebar">
<module display="users" limit="5" />
<module display="comment" limit="10" />
</div>

bulunan her modül etiketi için, ben (nitelikleri olarak etiketinde listelenir) parametreleri ile modül oluşturma işlevi çalıştırmak istiyorum. Ve işlevinden döndürülen alır gerçek bir HTML öbek, modül etiketi değiştirin.

5 Cevap

Size özel etiketler maç için düzenli ifadeleri kullanabilirsiniz.

$html // Your html

preg_match_all('/<module\s*([^>]*)\s*\/?>/', $html, $customTags, PREG_SET_ORDER);

foreach ($customTags as $customTag) {
 $originalTag=$customTag[0];
 $rawAttributes=$customTag[1];

 preg_match_all('/([^=\s]+)="([^"]+)"/', $rawAttributes, $attributes, PREG_SET_ORDER);

 $formatedAttributes=array();

 foreach ($attributes as $attribute) {
  $name=$attribute[1];
  $value=$attribute[2];

  $formatedAttributes[$name]=$value;
 }

 $html=str_replace($originalTag, yourFunction($formatedAttributes), $html);
}

If you would like to take a XML aproach, contact me and I'll show you how to do that.

http://us3.php.net/manual/en/function.preg-replace-callback.php

Eşim etiketi ayrıştırma işini yapmıştır ... Eğer ulaşmak istediğiniz karmaşıklığına bağlı olarak, regex kullanmak isteyebilirsiniz. Etiketler bulmak için regex kullanın ve sonra kendi tercihinize dize işleme fonksiyonları ile daha fazla dizeleri kadar ayırabilirsiniz. Preg_replace_callback üzerinde arama özelliği, size bunu temsil etmek istersen html veri ile etiketini değiştirmek izin verir. Şerefe!

edit: ( < module +?([^=]+?="[^"]*?" ?)? ?/>) This should match module functions... remove the space between the < and module (SO is parsing it wrong). In your custom function, match the individual parameters contained within the tag, using a regex like: ([^=]+?="[^"]?")

Sen simplexml kullanarak dosyayı ayrıştırmak ve yineleme ve elemanları bulduktan sonra özelliklerini alabilirsiniz. İşte bir example. olduğunu

Natso önerilen olarak preg_replace_callback bu tip çözelti için mükemmeldir.

Bu don sağlayacaktır Başka bir seçenek 'Eğer XmlReader and act on the appropriate nodes. As a further suggestion, you may want to use Xml Namespaces özel etiketleri ile, doğrulanırken xml biçimlendirme bekliyoruz, XML olarak dosya / şablonu okumak olurdu t çarpışmalar var.

Bunun için gerçek bir php sınıfı yazdı ve BSD altında yayınlandı. See this other thread