سلام دوستان من می خواستم با preg_replace محتویات یه تگ اچ تی ام ال رو بر اساس کلاسی که داره حذف کنم . خودم از کد زیر استفاده کردم ولی جواب نمیده میشه راهنمایی بفرمائید ...
مثلا تو این مثال می خوام کامل هم خود کلاس container و هم اچ تی ام ال داخلش حذف بشن
$html = '
<div class="container">
<div class="hdr"> Text123 <a href=""> ali</a><span> lavad</span><div><div><div>reza</div></div></div>
<div class="right">
<img src="ali.jpg" />
<a href="#">ادامه</a>
<h3> text... </h3>
....
</div>
</div>';
$html = preg_replace('#<div class="container">(.*?)</div>#', '', $html);
ممنون میشم راهنمایی بفرمائید
بهتره چنین کارهایی رو با DOM Parserها مثل Simple HTML DOM و... انجام بدین. بخاطر وجود تگهای تودرتو، RegExp پیچیده و ناکارآمد میشه.
(21-07-1396، 01:51 ب.ظ)ADMIN نوشته: [ -> ]بهتره چنین کارهایی رو با DOM Parserها مثل Simple HTML DOM و... انجام بدین. بخاطر وجود تگهای تودرتو، RegExp پیچیده و ناکارآمد میشه.
ممنون مهندس از کد زیر استفاده کردم درست شد
$string = '
<div class="container"> salam
<div class="hdr"> Text123 <a href=""> ali</a><span> lavad</span><div><div><div>reza</div></div></div>
<div class="right">
<img src="ali.jpg" />
<a href="#">ادامه</a>
<h3> text... </h3>
....
</div>
</div>
</div>';
$dom = new DOMDocument;
@$dom->loadXML($string);
$xpath = new DOMXPath($dom);
$inners = $xpath->query('//div[@class="hdr"]'); //Select all p.inner in the document
foreach ($inners as $element) {
$element->parentNode->removeChild($element); //Remove 'em
}
var_dump($dom->saveHTML($dom));
exit;
یه مشکلی که هست اینکه اگه تگ های اچ تی ام ال به درستی بسته نشده باشه کد بالا با ارور مواجه میشه ...
میشه با php کاری کرد که اگه چنین مشکلی وجود داشت خودش تگ هارو درست کنه ؟؟
دقت کنید که PHP برای این کارها ساخته نشده. وقتی شما میخواین یک سند HTML رو پردازش کنین، فرض بر اینه که اون سند مطابق با استانداردها تولید شده. البته منظورم این نیست که غیرممکنه کاری که میخواین ولی واقعاً مشکله چون خیلی حالتها وجود داره که باعث میشه یک سند استاندارد نباشه.
ممنون حق با شماست خیلی حالت ها وجود داره
یه سئوال دیگه چطور میتونم مثلا تو مثال بالا به والد کلاس hdr دسترسی پیدا کنم ؟؟
$inners = $xpath->query('//div[@class="hdr"]');
بالایی باید تبدیل به پایینه بشه
$inners = $xpath->query('//div[@class="hdr"]/..');