2016-07-20 5 views
1

im mit PHP und ich möchte wissen, wie <p class="xxx"></p> Tageinige HTML-Tags löschen nur in wenigen Fällen mit php

von diesem löschen:

<p class="xxx"> 
    <a href="xxx" target="xxx"> 
     <figure> 
      <img src="xxx"/> 
      <figcaption class="xxx"> 
       <h1 class="xxx">Text</h1> 
       <cite class="xxx">Text</cite> 
      </figcaption> 
     </figure> 
    </a> 
</p> 

dazu:

<a href="xxx" target="xxx"> 
    <figure> 
     <img src="xxx"/> 
     <figcaption class="xxx"> 
      <h1 class="xxx">Text</h1> 
      <cite class="xxx">Text</cite> 
     </figcaption> 
    </figure> 
</a> 

Ich möchte <p></p> löschen, nur wenn <p><a><figure><img/><figcaption><h1></h1><cite></cite></figcaption></figure></a></p>

ich versuche dies :

$html = preg_replace("' 
(<p[^>]*>)([^<]*<a[^>]*>[^<]*<figure[^>]*>[^<]*<img[^>]*>[^<]*<figcaption[^>]*>[^<]*<h1[^>]*>[^<]*</h1[^>]*>[^<]*<cite[^>]*>[^<]*</cite[^>]*>[^<]*</figcaption>[^<]*[^<]*</figure>[^<]*[^<]*</a>[^<]*)(</p>)'sim", "$2", $valBody); 
echo '<H1>Nuevo </H1><br>' . $html; 

aber ich kann es nicht bekommen, können Sie mir bitte helfen.

+3

keine Regexes verwenden. benutze [DOM] (http://php.net/dom). Du wirst FAR mehr Zeit damit verbringen, vor Frustration zu schreien und Haare auszureißen, die versuchen, eine Regex herauszufinden, als du DOM lernst, und deine Stimmbänder und Frisur intakt zu halten. –

+0

Obligatorisch: http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags#answer-1732454 –

Antwort

0

Wenn Sie es mit preg_replace() tun wollen, hier ist, wie ich es tat:

<?php 

$html =<<<HTML 
<p class="xxx"> 
    <a href="xxx" target="xxx"> 
     <figure> 
      <img src="xxx"/> 
      <figcaption class="xxx"> 
       <h1 class="xxx">Text</h1> 
       <cite class="xxx">Text</cite> 
      </figcaption> 
     </figure> 
    </a> 
</p> 
HTML; 

$pattern = '#(<p.+">)#'; 
$replace = ''; 
$html = preg_replace($pattern, $replace, $html); 
$pattern = "#(</p>)#"; 
$replace = ''; 
$html = preg_replace($pattern, $replace, $html); 
$pattern = "#(\s\s)+#"; 
$replace = ''; 
$html = preg_replace($pattern, $replace, $html); 

echo '<H1>Nuevo </H1><br>' . $html; 

?> 

Dieser Code gibt die Ausgabe so ähnlich wie es gefragt wurde:

<H1>Nuevo </H1><br><a href="xxx" target="xxx"><figure><img src="xxx"/><figcaption class="xxx"><h1 class="xxx">Text</h1><cite class="xxx">Text</cite></figcaption></figure></a> 

ich bin Anfänger Programmierer und das ist meine erste Antwort auf Stack Overflow. Freundliche Grüße.

+0

ist in Ordnung, aber das löschen alle

Tags, ich will nur sie löschen, wenn ich diese Sequenz von Tags gefunden:

skycomputer2

+0

Oh. Dann kannst du abhängig von deiner Situation das p-Element mit XPath greifen (wenn du seinen xpath schon vorher kennen kannst) und danach kannst du etwas ähnliches wie mit preg_replace() machen. –

Verwandte Themen