PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mit PCRE alles zwischen bestimmten divs ersetzen



Figapu
21-04-2007, 08:53
Hallo,

Ich möchte innerhalb eines Textes alles zwischen <div class="code"> und </div> suchen und alles innerhalb des Divs mit htmlspecialchars() bearbeiten.

Jetzt hab ich mir gedacht, ich such mit preg_match_all() einfach alle vorkommen, bearbeite alle Matches und ersetze dann mit preg_replace alle vorkommen durch meine überarbeitete Version.

Das einzige Problem was ich dabei habe, ist der Reguläre Ausdruck. So sieht das bisher aus:



//innerhalb von <div class="code"></div> alle sonderzeichen tilgen
$regex = '/<div class="code">(.+)<\/div>/i';
$matches = array();

//alle vorkommen suchen
preg_match_all($regex, $tut['tutorial'], $matches);

var_dump($matches);

//alle vorkommen bearbeiten und ersetzen
foreach ($matches as $current)
preg_replace($regex, htmlspecialchars($current), $tut['tutorial']);


preg_match_all() findet einfach nichts, weil vermutlich mein Ausdruck falsch ist aber ich find den Fehler net.

undefined
22-04-2007, 16:12
Ich vermute einmal du verwendest PHP 5.
Dann ist DOM die bessere Wahl ;)
Das regexp verhalten unter PHP5 ist im Moment wegen der Unicode Umstellung nicht die Beste wahl.


$str = file_get_contents( "http://my.homepage.de/index.php" );
$str = stripslashes( $str );
$dom = new DomDocument( '1.0', 'utf-8' );
$dom->loadHTML( $str );
$Nodes = $dom->getElementsByTagName( "div" );
foreach( $Nodes AS $Child ) {
if ( $Child->getAttributeNode( "class" )->nodeValue == 'TextBloc' ) {
$old = $Child->firstChild;
$new = new DOMText( "Einen neuen Text einfuegen ;-)" );
$Child->replaceChild( $new, $old );
}
}
echo $dom->saveHTML();