رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
حذف محتویات یک تگ اچ تی ام ال با preg_replace (حل شد)
#1
سلام دوستان من می خواستم با 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);
 

ممنون میشم راهنمایی بفرمائید
پاسخ
تشکر شده توسط:
#2
بهتره چنین کارهایی رو با DOM Parserها مثل Simple HTML DOM و... انجام بدین. بخاطر وجود تگ‌های تودرتو، RegExp پیچیده و ناکارآمد میشه.
پاسخ
تشکر شده توسط: mgbg
#3
(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;
پاسخ
تشکر شده توسط:
#4
یه مشکلی که هست اینکه اگه تگ های اچ تی ام ال به درستی بسته نشده باشه کد بالا با ارور مواجه میشه ...
میشه با php کاری کرد که اگه چنین مشکلی وجود داشت خودش تگ هارو درست کنه ؟؟
پاسخ
تشکر شده توسط:
#5
دقت کنید که PHP برای این کارها ساخته نشده. وقتی شما میخواین یک سند HTML رو پردازش کنین، فرض بر اینه که اون سند مطابق با استانداردها تولید شده. البته منظورم این نیست که غیرممکنه کاری که میخواین ولی واقعاً مشکله چون خیلی حالت‌ها وجود داره که باعث میشه یک سند استاندارد نباشه.
پاسخ
تشکر شده توسط: mgbg
#6
ممنون حق با شماست خیلی حالت ها وجود داره
یه سئوال دیگه چطور میتونم مثلا تو مثال بالا به والد کلاس hdr دسترسی پیدا کنم ؟؟
پاسخ
تشکر شده توسط:
#7
$inners = $xpath->query('//div[@class="hdr"]');
بالایی باید تبدیل به پایینه بشه
$inners = $xpath->query('//div[@class="hdr"]/..');
پاسخ
تشکر شده توسط:




کاربران در حال بازدید این موضوع: 2 مهمان