PHP, nasıl html etiketi belirli bir sınıf kaldırmak için?

4 Cevap php

PHP aşağıdaki dize verilmiştir:

$html = "<div>
<p><span class='test1 test2 test3'>text 1</span></p>
<p><span class='test1 test2'>text 2</span></p>
<p><span class='test1'>text 3</span></p>
<p><span class='test1 test3 test2'>text 4</span></p>
</div>";

Ben sadece boş ya istiyorum ya da o "dnm2" olan herhangi bir sınıf kaldırmak, yani sonuç bu olacaktır:

<div>
<p><span class=''>text 1</span></p>
<p><span class=''>text 2</span></p>
<p><span class='test1'>text 3</span></p>
<p><span class=''>text 4</span></p>
</div>

Eğer eleman çıkarmadan konum if:

<div>
<p>text 1</p>
<p>text 2</p>
<p><span class='test1'>text 3</span></p>
<p>text 4</p>
</div>

Ben bir regex ifade veya PHP Basit HTML DOM Parser gibi bir şey kullanmak için mutluyum, ama bunu kullanmak için nasıl hiçbir ipucu var. Ve benim yukarıdaki örnekte olduğu gibi birden fazla nitelikler vardır, özellikle, regex, ben eleman bulmak için nasıl biliyorum, ama belirli nitelik o / w ilişkili değildir. Herhangi bir fikir?

4 Cevap

$notest2 = preg_replace(
         "/class\s*=\s*'[^\']*test2[^\']*'/", 
         "class=''", 
         $src);

C.

kullanarak PHP Simple HTML DOM Parser

Updated and tested! You can get the simple_html_dom.php include from the above link or here.

Her iki durum için:

include('../simple_html_dom.php');

$html = str_get_html("<div><p><span class='test1 test2 test3'>text 1</span></p>
<p><span class='test1 test2'>text 2</span></p>
<p><span class='test1'>text 3</span></p>
<p><span class='test1 test3 test2'>text 4</span></p></div>");

case 1:

foreach($html->find('span[class*="test2"]') as $e)
$e->class = '';

echo $html;

case 2:

foreach($html->find('span[class*="test2"]') as $e)
$e->parent()->innertext = $e->plaintext;

echo $html;

Sen her unsuru üzerinde yineleme, bir DOM Parser kullanabilirsiniz. Onun class özellik içerip içermediğini kontrol edin test2 class (strpos()) böylece daha sonra class özniteliği için bir değer olarak boş bir dize ayarlarsanız.

Ayrıca bunu yapmak için normal ifadeleri kullanabilirsiniz - çok daha kısa bir yol. Sadece bulmak ve değiştirmek (preg_replace()) şu ifadeyi kullanıyor: #class=".*?test2.*?"#is