Ben bir div id gibi görünen bir çıkış kaldırmak gibi var
<div id="ithis" class="cthis">Content here which includes other elements etc..) </div>
Nasıl PHP ve regex kullanarak bu div ve bunun içinde her şeyi kaldırabilirim?
Teşekkür ederim.
Cevap basit kalmamasıdır. Bunun yerine PHP'nin birçok HTML ayrıştırıcıların birini kullanın. Regexes HTML manipüle lapa lapa ve hata eğilimli bir yoldur.
İşte bunu yapabilirsiniz söyleniyor:
$html = preg_replace('!<div\s+id="ithis"\s+class="cthis">.*?</div>!is', '', $html);
Ama many şeyler bu yanlış olabilir. Örneğin, eğer bir div içerir:
<div id="ithis" class="cthis">Content here which <div>includes</div> other elements etc..) </div>
Eğer ile bitireceğiz:
other elements etc..) </div>
regex ilk </div>
de duracak gibi. Ve hayır gerçekten sürekli (düzenli ifadeler) ile bu sorunu çözmek için yapabileceğiniz hiçbir şey yok.
Bu gibi daha görünen bir çözümleyici ile Bitti:
$doc = new DOMDocument();
$doc->loadHTML($html);
$element = $doc->getElementById('ithis');
$element->parentNode->removeChild($element);
$html = $doc->saveHTML();
PHP sunucu tarafı ve çıkış sunucudan geliyor. Sadece çıkış değil o değil mi? Yoksa bunu saklamaya çalışıyorsun? Eğer öyleyse, bir stil sayfasında, sadece söylemek #ithis {display:none}
.
Dizenin yazılı değil PHP bazı fonksiyon bir geri dönüş olduğunu ve bu kod ile muck istemiyorsanız, vb, çıktı sözdizimi farklı, iç içe div yıllardan açıklamak için çok zor bir regex yazmak zorunda . Sana yardımcı olmak için bazı ayrıştırıcı (belki de bu Zend Framework component) kullanmanızı tavsiye ediyorum. Ben benzer bir şey için bunu bir kaç kez kullandım. Eğer tüm ZF ile aşina değilseniz, size başka bir şey denemek isteyebilirsiniz rağmen.