PHP DOM - span etiketleri sıyırma içeriklerini bırakarak

0 Cevap php

Ben gibi biçimlendirme almak için arıyorum:

<span class="test">Some text that is <strong>bolded</strong> and contains a <a href="#">link</a>.</span>

ne kalır bu şekilde ve yayılma sıyırma için PHP en iyi yöntemi bulmak:

Some text that is <strong>bolded</strong> and contains a <a href="#">link</a>.

Ben PHP DOM yerine regex kullanarak ayrıştırma HTML ile ilgili diğer sorular çok okudum, ama sağlam HTML içeriğini bırakarak, PHP DOM ile yayılma şerit için bir yol anlamaya mümkün olmuştur. Nihai hedefi kendi içeriklerini bırakarak, tüm yayılma etiketleri belgeyi şerit muktedir olmaktır. Bu PHP DOM ile yapılabilir mi? Daha iyi performans sağlar ve yerine DOM ayrıştırma dize ayrıştırma dayanmaz bir yöntem var mı?

Ben şimdiye kadar herhangi bir sorun olmadan, bunu yapmak için regex kullandım:

/<(\/)?(span)[^>]*>/i

Ama burada benim ilgi daha iyi bir PHP programcısı olmak olduğunu. O kötü biçimlendirilmiş biçimlendirme ile bir regex çelme her zaman mümkün olduğu ve daha iyi bir yol arıyorum. Ben de aşağıdaki gibi bir şey yapıyor) (sayisinda strip_tags kullanarak kabul var:

public function strip_tags( $content, $tags_to_strip = array() )
{
    // All Valid XHTML tags
 $valid_tags = array(
  'a','abbr','acronym','address','area','b','base','bdo','big','blockquote','body','br','button','caption','cite',
  'code','col','colgroup','dd','del','dfn','div','dl','DOCTYPE','dt','em','fieldset','form','h1','h2','h3','h4',
  'h5','h6','head','html','hr','i','img','input','ins','kbd','label','legend','li','link','map','meta','noscript',
  'object','ol','optgroup','option','p','param','pre','q','samp','script','select','small','span','strong','style',
  'sub','sup','table','tbody','td','textarea','tfoot','th','thead','title','tr','tt','ul','var'
 );

    // Remove each tag to strip from the valid_tags array
 foreach ( $tags_to_strip as $tag ){
  $ndx = array_search( $tag, $valid_tags );
  if ( $ndx !== false ){
   unset( $valid_tags[ $ndx ] );
  }
 }

    // convert valid_tags array into param for strip_tags
 $valid_tags = implode( '><', $valid_tags );
 $valid_tags = "<$valid_tags>";

 $content = strip_tags( $content, $valid_tags );
 return $content;
}

Ama bu yine de dize ayrıştırma ve DOM ayrıştırma değil. Metin mal oluşturulmuş olup olmadığını Yani, çok fazla şerit mümkündür. Birçok kişi Simple HTML DOM Parser kullanarak önermek için hızlı, ancak kaynak koduna bakarak, o da html ayrıştırmak için regex kullanıyor gibi görünüyor.

Bu Php5 en DOM ile yapılır, ya da sağlam bunların içeriğini bırakarak etiketleri şerit için daha iyi bir yolu var olabilir. Bu Tidy veya HTML Purifier metni temizlemek için kullanın ve sonra bunun üzerine regex / HTML Basit HTML DOM ayrıştırıcı kullanmak için kötü bir uygulama olurdu?

Gibi Kütüphaneler phpQuery basit bir görev olması gerektiği gibi görünüyor ne için çok ağır gibi görünüyor.

0 Cevap