p etiketlerinde tüm sınıfları şerit

6 Cevap php

Herhangi bir php bir dizeden TÜM sınıfları kaldırmak için bir işlev bilseydim sadece Temelde ben sadece istiyorum .. merak ediyorum

<p>

etiketler yerine

<p class="...">

Eğer mantıklı :)

6 Cevap

Oldukça naif regex muhtemelen sizin için çalışacak

$html=preg_replace('/class=".*?"/', '', $html);

Gövde metni nedense class = "şey" içeren oldu eğer başarısız olur çünkü ben naif demek!. Gerekirse bu sınıf için bakarak biraz daha sağlam yapılmış olabilir = "" inside bracketted etiketleri açılı.

JQuery üzerinde böyle bir şey yapardı. Lütfen sayfa başlığında bu yerleştirin:

$(document).ready(function(){
$(p).each(function(){
     $(this).removeAttr("class");
     //or  $(this).removeclass("className");
})

});

Belki ihtiyacı için biraz overkill ama, / doğrulamak / temiz HTML verilerini ayrıştırmak için, ben biliyorum iyi araçtır HTML Purifier

Bu hangi etiketleri tanımlamak için izin verir, ve hangi nitelikleri, Tamam; ve / veya hangilerinin değildir; ve çıkış olarak temiz / geçerli (X) HTML verir.

(Using regexes to "parse" HTML seems OK at the beginning... And then, when you want to add specific stuff, it generally becomes hell to understand/maintain)

Bir DOMDocument sınıfa HTML yüklemek, SimpleXML içine yükleyin. Sonra onlar aracılığıyla tüm p öğeleri ve daha sonra döngü için bir XPath sorgusu yapmak. Her loop üzerinde, "killmeplease" gibi bir şey sınıf özniteliğini yeniden adlandırın.

O (ama genellikle sadece daha iyi, arada, HTML değişebilir ki,) XML olarak SimpleXML reoutput, bitti, ve her p "killmeplease" bir sınıf olan HTML dizesini sahip olacaktır. Aslında bunları kaldırmak için str_replace kullanabilirsiniz.

Örnek:

$html_file = "somehtmlfile.html";

$dom = new DOMDocument();
$dom->loadHTMLFile($html_file);

$xml = simplexml_import_dom($dom);

$paragraphs = $xml->xpath("//p");

foreach($paragraphs as $paragraph) {
     $paragraph['class'] = "killmeplease";
 }

 $new_html = $xml->asXML();

 $better_html = str_replace('class="killmeplease"', "", $new_html);

Eğer kod daha basit ama preg_replace ile arapsaçı yapmak istiyorsanız ya, sen ile gidebiliriz:

$html_file = "somehtmlfile.html";
$html_string = file_get_contents($html_file);

$bad_p_class = "/(<p ).*(class=.*)(\s.*>)/";

$better_html = preg_replace($bad_p_class, '$1 $3', $html_string);

Düzenli ifadeler ile zor yanlarından açgözlü olma eğilimindedir ve p eleman etiketi içinde bir satır sonu varsa o kapatmak için çalışıyor sorunlara yol açabilir. Ama bu bir çekim ya verir.

$html = "<p id='fine' class='r3e1 b4d 1' style='widows: inherit;'>";    
preg_replace('/\sclass=[\'|"][^\'"]+[\'|"]/', '', $html);

Microsoft Office ihraç HTML karşı teste ediliyor Eğer sınıf ayrılmasından daha gerekiyor ama HTML Tidy bir config flag sadece Microsoft Office için var olacak!

Aksi takdirde, bu onlar biraz açgözlü ve (' veya ") kullanılacak kapsülleme ne tür bilmiyorum verilen diğer bazı cevaplar daha güvenli olmalıdır.

Her iki ters virgül (") kesme işaretleri ('), ben kaçmak zorunda olduğu gibi Note: desen, /\sclass=['|"][^'"]+['|"]/ aslında ama birinin tüm oluşumları (\') desen kapsüllemek için.

HTML Purifier

HTML kodu nedeniyle yazılı veya biçimlendirilmiş olabilir, farklı şekillerde yüzlerce regex çok zor olabilir.

HTML purifier HTML temizlemek için olgun bir açık kaynak kütüphanesidir. Ben bu durumda kullanımını tavsiye ederiz.

HTML Arıtma yapılandırma belgelerinde, sen izin verilmelidir sınıfları ve özelliklerini belirleyebilirsiniz ve eğer bulursa temizleyici ne yapmalıyım.

http://htmlpurifier.org/docs/