SQL Replace: Text in der Mitte ignorieren

Pfandfinder

Lieutenant
Registriert
Nov. 2020
Beiträge
619
ich habe in meiner Datenbank viele Datensätze mit Texten wo unter anderem steht:
HTML:
<h1 class="title1">Überschrift: bla bla</h1>

Die Klassen title2 und so gibt es auch als h1. jetzt möchte ich aber mit der Class title1 zu <h2> wechseln... ich könnte natürlich mit REPLACE in SQL das <h1 class="title1"> ändern lassen, aber das Problem ist ja das </h1> am Ende. ich brauche also eine Funktion, dass ich <h1 class="title1">IRGENDWAS HIER DAZWISCHEN</h1> ersetzen kann. wie geht das ? gerne auch mit PHP.
 
Tipp: speichere in der Datenbank nur IRGENDWAS HIER DAZWISCHEN und füge h1 und deine Klasse mit PHP am Ende an.
 
Hört sich für mich so an, als würdest du HTML in der Datenbank speichern. Mit PHP könntest du das entweder mit regulären Ausdrücken oder mit DOM machen (meine Empfehlung):
PHP:
$contents = <<<STR
<h1>Überschrift</h1>
<p>paragraph</p>
<p>noch einer</p>
STR;

$search = "h1";
$replacement = "h2";

$internal_errors = libxml_use_internal_errors(true);
$dom = new DOMDocument;
$dom->loadHTML($contents);

$elements = $dom->getElementsByTagName($search);
for ($i = $elements->length - 1; $i >= 0; $i --) {
    $nodePre = $elements->item($i);
    $nodeDiv = $dom->createElement($replacement, $nodePre->nodeValue);
    $nodePre->parentNode->replaceChild($nodeDiv, $nodePre);
}

libxml_use_internal_errors($internal_errors);
 
  • Gefällt mir
Reaktionen: Pfandfinder
Zurück
Oben