Bestimmte tags entfernen

rernanded

Erfahrenes Mitglied
Hallo,

ich hab eine ganze Sammlung alter Website-Codes mit den üblichen html-tags.

Wie kann ich bei der Wiedergabe die Zeile mit <!DOCTYPE ...> , alles zwischen <head> und </head> sowie alles zwischen einzelnen <script ...> und </script> jeweils durch (code ersetzt) ersetzen.

MONI
 
Zuletzt bearbeitet:
Gibt mal ein Minimal Beispiel, also wie es vorher aussieht und wie nacher.

Du kannst jeden beliebigen Quelltext einer Webseite nehmen.
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="de-DE" xml:lang="de-DE">
  <head>
    <title>Metall und mehr</title>
    <!-- meta content -->
    <meta name="description" content="Alles zum Thema Metall und Rohstoffe." />
    <meta name="keywords" content="Metall, Alt Metall, Metalle, Altmetalle" />
    <meta http-equiv="content-type" content="application/xhtml+xml; charset=iso-8859-1" />
    <meta http-equiv="content-language" content="de" />
    <meta http-equiv="content-style-type" content="text/css" />
    <meta http-equiv="imagetoolbar" content="no" />
		
    <script src="/js/func_core.js?root=/" type="text/javascript"></script>
  </head>
  <body>
		<script type="text/javascript">
			var $buoop = { reminder:24 };
			$buoop.ol = window.onload;
			window.onload = function() {
				var e = document.createElement("script");
				e.setAttribute("type", "text/javascript");
				e.setAttribute("src", "http://browser-update.org/update.js");
				document.body.appendChild(e);
				if ($buoop.ol) $buoop.ol();
			}
		</script>
    
		
		
	
Bei uns finden Sie alle Informationen zu Metallen und den verschiedenen Metallsorten, die neuesten Nachrichten aus der Welt der Metalle und eine tolle Community rund ums Metall.<div class="cleaner">
		<div id="site_content_bottom">
		<div id="content_bottom_container">
					
                <div id="metallsorten">
                <div class="metallsorten_header">
                <div class="metallsorten_body">
        
		<script type="text/javascript">
		  var _gaq = _gaq || [];
		  _gaq.push(['_setAccount', 'UA-9']);
		  _gaq.push(['_trackPageview']);
		  (function() {
		    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
		  })();
		</script>
  </body>
</html>

HTML:
(ersetzt)
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="de-DE" xml:lang="de-DE">
(ersetzt)
<body>
(ersetzt)
Bei uns finden Sie alle Informationen zu Metallen und den verschiedenen Metallsorten, die neuesten Nachrichten aus der Welt der Metalle und eine tolle Community rund ums Metall.<div class="cleaner"></div>
		<div id="site_content_bottom">
		<div id="content_bottom_container">
					
                <div id="metallsorten">
                <div class="metallsorten_header">
                <div class="metallsorten_body">
        
(ersetzt)
</body>
</html>

Ich denke mal es geht mit REGEX ... also preg_replace ... zB /<head>.*?</head>/

Im Prinzip wäre es schön wenn ich das mit beliebigen tags machen könnte.
Bei head ist es vllt einfacher weil der schließende > direkt folgt <head> anders als bei <script src="...>.

MONI
 
Zuletzt bearbeitet:
ich würde sagen iwie sowas in die richtung?

Code:
/((\<script .*?\>.*?\<\/script\>)|(\<img .*?\/\>)|(\<head\>.*?\<\/head\>))/si

dabei musst du natürlich immer den namen des gesuchten tags eingeben anstelle von script, img, head...

also beispielsweise als funktion:

PHP:
function($tag, $quelltext)
{
return preg_replace("{ERSETZT}", "/((\<". $tag ." .*?\>.*?\<\/". $tag ."\>)|(\<". $tag ." .*?\/\>)|(\<". $tag ."\>.*?\<\/". $tag ."\>))/si", $quelltext);
}

Weis nicht ob so 100% richtig ist,
musste mal ausprobieren.
 
Du kannst auch mal damit rum experimentieren, vielleicht bringt es dich zum Ziel:

PHP:
// DOM-Repräsentation laden
$dom = new DOMDocument('1.0', 'UTF-8');

// $str ist der HTML-Code
$dom->loadHTML($str);

// X-Path-Objekt erzeugen
$xpath = new DOMXPath($dom);

// Head-Element via X-Path holen
$head_entries = $xpath->query('/html/head');
// Über Ergebnis-DOMNodeList iterieren
foreach($head_entries as $head_entry)
{
	// Neue Header erzeugen
	// TODO: Kind-Elemente von <head> erzeugen
	$new_entry = $dom->createElement('head');
	
	// Beispielhaft ein Stylesheet-Link
	$style_sheet = $dom->createElement('link', '');
	$style_sheet->setAttribute('rel', 'stylesheet');
	$style_sheet->setAttribute('type', 'text/css');
	$style_sheet->setAttribute('href', '/css/style.css');
	$new_entry->appendChild($style_sheet);
	
	// Alten ersetzen
	$head_entry->parentNode->replaceChild($new_entry, $head_entry);
}

// Script-Entries via X-Path holen
$script_entries = $xpath->query('//script');
foreach($script_entries as $script_entry)
{
	// Script-Entry löschen
	$script_entry->parentNode->removeChild($script_entry);
}

// Gesamtes HTML ausgeben
$new_html = $dom->saveHTML();

// DOCTYPE entfernen
$new_html = preg_replace('/<!DOCTYPE.*?>/', '', $new_html);

// Fertig...
echo $new_html;

Evtl. willst du noch HTMLPurifier einsetzen um das HTML wieder lesbar zu machen.
 

Neue Beiträge

Zurück