{"id":1443,"date":"2018-09-08T16:48:52","date_gmt":"2018-09-08T14:48:52","guid":{"rendered":"http:\/\/evileu.de\/zum-schwarzen-pinguin\/?p=1443"},"modified":"2018-11-10T10:35:43","modified_gmt":"2018-11-10T09:35:43","slug":"preg_replace-co-im-praktischen-einsatz","status":"publish","type":"post","link":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/2018\/09\/08\/preg_replace-co-im-praktischen-einsatz\/","title":{"rendered":"preg_replace &#038; Co. im praktischen Einsatz"},"content":{"rendered":"<p>Ich bin immer noch an den exportierten Posts aus WordPress, die wir im Q&amp;D-Editor schonmal manuell nachbearbeitet haben. Dabei sind sicher etliche Dinge aufgefallen, die man programmatisch korrigieren k\u00f6nnte, und wie man das praktisch angeht, schreib ich hier mal auf.<\/p>\n<p>Wir haben immer noch die Ausgangstabelle rezepte, in der nur die ID, der post_content und der post_title drinstehen. Damit wir unsere Rohdaten nicht verhunzen, legen wir uns erstmal eine leere Kopie dieser Tabelle an, das geht im phpmyadmin unter &#8222;Operationen&#8220;, kopiere Tabelle, nur Struktur, oder mit dem simplen SQL:<\/p>\n<pre class=\"default prettyprint prettyprinted\"><code><span class=\"pln\">CREATE TABLE rezepte_arbeit LIKE rezepte<\/span><\/code><\/pre>\n<p>Das kopiert die Struktur inklusive evtl. vorhandener Indizes etc. und wird unser Arbeitspferd. (Falls man mal die Daten mitkopieren m\u00f6chte, CREATE TABLE table2 SELECT * FROM table1, aber das nur als Anmerkung am Rande)<\/p>\n<p>Zur Kontrolle des Ergebnisses klemmt man sich die (noch leere) Arbeitstabelle in den Q&amp;D-Editor. Sp\u00e4testens jetzt macht es Sinn, den Namen der Tabelle auf eine Variable zu legen und die beiden SQLs entsprechend anzupassen.<\/p>\n<pre>\/\/Arbeitstabelle festlegen\r\n$arbeitstabelle = \"arbeit_rezepte\";\r\necho \"&lt;h1&gt;Tabelle: \".$arbeitstabelle.\"&lt;\/h1&gt;\";\r\n...\r\n$sql = \"SELECT * FROM \".$arbeitstabelle.\" WHERE post_content LIKE '%\".$filter.\"%'\";\r\n...\r\n$sql = ('SELECT * FROM '.$arbeitstabelle.' WHERE post_content LIKE \"%'.$filter.'%\" \r\nLIMIT '.$limit.', '.$ergebnisse_pro_seite.'');<\/pre>\n<p>Wer es ganz genau haben m\u00f6chte, legt auch noch den Dateinamen des Q&amp;D-Editor Skripts auf eine Variable und pa\u00dft die Navigationslinks entsprechend an, aber das ist eigentlich schon Flei\u00dfarbeit:<\/p>\n<pre>\/\/Dateinamen auf Variable legen\r\n<span style=\"color: #ff0000;\">$datei = \"arbeitspferd.php\";<\/span>\r\n...\r\nif($limit&gt;0){echo '&lt;a href=\"'.<span style=\"color: #ff0000;\">$datei<\/span>.'?seite_nr='.($limit-1).'\"&gt;&lt;button type=\"button\"&gt;Voriger Datensatz&lt;\/button&gt;&lt;\/a&gt;';}\r\necho '&lt;a href=\"'.<span style=\"color: #ff0000;\">$datei<\/span>.'?seite_nr='.($limit+2).'\"&gt;&lt;button type=\"button\"&gt;N\u00e4chster Datensatz&lt;\/button&gt;&lt;\/a&gt;&lt;br&gt;';\r\n...\r\n\u00a0\/\/Nav Links alle Seiten\r\n\u00a0for ($i=1; $i&lt;=$row_total; $i++) { \r\n\u00a0\u00a0\u00a0 echo \"&lt;a href='\".<span style=\"color: #ff0000;\">$datei<\/span>.\"?seite_nr=\".$i.\"'&gt;\".$i.\"&lt;\/a&gt; \"; \r\n};<\/pre>\n<p>Da die Tabelle noch leer ist, kriegt man erstmal gar nichts angezeigt:<\/p>\n<div id=\"attachment_1444\" style=\"width: 521px\" class=\"wp-caption alignnone\"><img aria-describedby=\"caption-attachment-1444\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-1444\" src=\"http:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/09\/arbeitstabelle_leer.jpg\" alt=\"arbeitstabelle_leer\" width=\"511\" height=\"371\" srcset=\"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/09\/arbeitstabelle_leer.jpg 511w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/09\/arbeitstabelle_leer-300x218.jpg 300w\" sizes=\"(max-width: 511px) 100vw, 511px\" \/><p id=\"caption-attachment-1444\" class=\"wp-caption-text\">arbeitstabelle_leer<\/p><\/div>\n<p>Aber das ist ja OK so und wird sich gleich \u00e4ndern.<\/p>\n<h2>Das Ger\u00fcst f\u00fcr die geplanten Aktionen<\/h2>\n<p>Ich bastle mir ein kleines Formular mit einem Button zum Starten des Skripts, und gebe der \u00dcbersicht halber mal alle Datens\u00e4tze tabellarisch aus. Das sieht so aus:<\/p>\n<pre>&lt;?php\r\n\/\/file:skript_starten.php\r\nheader('Content-Type: text\/html; charset=utf-8');\r\nrequire 'connection.php';\r\n\r\n\/\/Quell-und Zieltabelle festlegen\r\n<span style=\"color: #008000;\">$quelltabelle = \"rezepte\"<\/span>;\r\n<span style=\"color: #008000;\">$zieltabelle = \"arbeit_rezepte\";<\/span>\r\n\r\necho \"&lt;h1&gt;Skript starten&lt;\/h1&gt;\";\r\necho \"&lt;h2&gt; Quelle: \".$quelltabelle.\" Ziel: \".$zieltabelle.\"&lt;\/h2&gt;\";\r\n\r\n<span style=\"color: #008000;\">\/\/Formular mit Button f\u00fcr Start<\/span>\r\necho \"&lt;form action ='#' method = 'post'&gt;\";\r\necho \"&lt;input type = 'submit' name = 'absenden' value = 'Skript starten'&gt;\";\r\necho \"&lt;\/form&gt;\";\r\n\r\nif(isset($_POST['absenden'])){\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0echo \"&lt;script type=\\\"text\/javascript\\\"&gt;alert('Skript gestartet');&lt;\/script&gt;\";\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0<span style=\"color: #ff0000;\">\/\/Hier kommt die Action hin<\/span>\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0}\r\n\r\n$sql = \"SELECT * FROM \".$quelltabelle.\"\";\r\n$rs_result = $conn-&gt;query($sql);\r\n$row_total = $rs_result-&gt;num_rows;\r\n\r\necho \"Datens\u00e4tze gesamt: \".$row_total.\"&lt;br&gt;\";\r\n\r\n\u00a0\/\/Ausgabe in Tabelle - nur Arbeitsversion, kann man f\u00fcr den Betrieb rausnehmen\r\necho \"&lt;table border='1' cellpadding='4'&gt;\";\r\necho \"&lt;tr&gt;&lt;th&gt;ID&lt;\/th&gt;&lt;th&gt;Titel&lt;\/th&gt;&lt;th&gt;Content&lt;\/th&gt;&lt;\/tr&gt;\";\r\n\u00a0\r\n\u00a0while($row = $rs_result-&gt;fetch_assoc()) {\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo \"&lt;tr&gt;&lt;td valign='top'&gt;\".$row[\"ID\"].\"&lt;\/td&gt;\";\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo \"&lt;td valign='top'&gt;\".utf8_encode($row[\"post_title\"]).\"&lt;\/td&gt;\";\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/HTML Source in Textarea ausgeben\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo \"&lt;td valign='top'&gt;&lt;textarea rows='5' cols='80'&gt;\".utf8_encode($row[\"post_content\"]).\"&lt;\/textarea&gt;\";\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo \"&lt;\/td&gt;&lt;\/tr&gt;\";\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0} \/\/Ende von while row = rs_result\r\n\u00a0\r\n\u00a0echo \"&lt;\/table&gt;\";\r\n\u00a0\r\n?&gt;<\/pre>\n<p>Ich hole mir mit dem require die Connection, lege Quell-Und Zieltabelle auf Variable und baue mir den Button f\u00fcr das Starten des Skripts. Die Kontrollausgabe der aktuellen Quelltabelle ist nicht unbedingt notwendig, das dient nur der \u00dcbersicht.<\/p>\n<h2>Jetzt gehts zur Sache<\/h2>\n<p>Der Ablauf ist folgender: die Datens\u00e4tze aus der Quelltabelle werden selektiert und die Felder auf Variablen gelegt. An den Variablen nimmt man dann die n\u00f6tigen Manipulationen vor, und die fertig bearbeiteten Datenfelder werden in ein Array geschrieben. Aus dem Array f\u00fcllt man dann mit Insert die Zieltabelle. Das Ergebnis kann man dann gleich mal im Q&amp;D-Editor \u00fcberpr\u00fcfen. Ich mach dann gleich noch ein Beispiel, hier zuerst mal der Source:<\/p>\n<pre>if(isset($_POST['absenden'])){\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0echo \"&lt;script type=\\\"text\/javascript\\\"&gt;alert('Skript gestartet');&lt;\/script&gt;\";\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\/\/Hier kommt die Action hin\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0$sql = \"SELECT * FROM \".$quelltabelle.\"\";\r\n\u00a0\u00a0 \u00a0$rs_result = $conn-&gt;query($sql);\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0$i=0;\r\n\u00a0\u00a0 \u00a0$temp = array();\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0while($row = $rs_result-&gt;fetch_assoc()) {\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$akt_id =$row[\"ID\"];\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$title = $row[\"post_title\"];\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$content = $row[\"post_content\"];\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0<span style=\"color: #ff0000;\">\/\/ Hier kann man beliebige Stringfunktionen auf die Felder anwenden<\/span>\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$content = strip_tags($content);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0<span style=\"color: #008000;\">\/\/Behandelte Strings in Array einlesen<\/span>\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$temp[$i][id] = $akt_id;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$temp[$i][titel] = $title;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$temp[$i][content]= $content;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$i = $i+1;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0}\r\n$len_temp = count($temp);\r\n\r\n<span style=\"color: #008000;\">\/\/Array zeilenweise in Zieltabelle wegschreiben<\/span>\r\nfor ($i = 0; $i &lt; $len_temp; $i++){\u00a0\u00a0 \u00a0\r\n\u00a0 \r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0 $temp_id = $temp[$i][id];\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0 $temp_titel = $temp[$i][titel];\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0 $temp_content = $temp[$i][content];\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0 \/\/addslashes ist n\u00f6tig weil sonst der Insert bei jedem Hochkomma aussteigt\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0 $sql_insert = \"INSERT INTO \".$zieltabelle.\" (ID, post_title, post_content) \r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0 VALUES (\".$temp_id.\" ,'\".addslashes($temp_titel).\"' , '\".addslashes($temp_content).\"')\";\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0 if (mysqli_query($conn, $sql_insert)) {\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0 echo \"Insert erfolgreich&lt;br&gt;\";\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0else {\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0 echo \"Fehler beim Update: \" . mysqli_error($conn);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n} \/\/ end for<\/pre>\n<p>Das wars schon &#8211; das Skript braucht ein paar Sekunden, nicht ungeduldig werden. Wichtig ist, dass man die einzuf\u00fcgenden Felder beim Insert noch mit einem addslashes() behandelt, weil sonst bei jedem Anf\u00fchrungszeichen im Text das Skript aussteigt.<\/p>\n<p>Ich habe oben nur eine Ersetzung ausgef\u00fchrt, n\u00e4mlich das:<\/p>\n<pre>$content = strip_tags($content);<\/pre>\n<p>Das f\u00fchrt in der Praxis evtl. zu unerw\u00fcnschten Effekten, weil es wirklich gnadenlos alle HTML-Tags raushaut. F\u00fcr meine Zwecke besser geeignet ist der strip_tags mit Ausnahmen:<\/p>\n<pre>$content = strip_tags($content,'&lt;h2&gt;, &lt;h3&gt;, &lt;ol&gt;, &lt;ul&gt;, &lt;li&gt;');<\/pre>\n<p>Das l\u00e4\u00dft meine \u00dcberschriften und die Listen drin, sieht schon besser aus.<\/p>\n<div id=\"attachment_1449\" style=\"width: 1043px\" class=\"wp-caption alignnone\"><img aria-describedby=\"caption-attachment-1449\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-1449\" src=\"http:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/09\/mit_liste.jpg\" alt=\"mit_liste\" width=\"1033\" height=\"556\" srcset=\"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/09\/mit_liste.jpg 1033w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/09\/mit_liste-300x161.jpg 300w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/09\/mit_liste-768x413.jpg 768w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/09\/mit_liste-1024x551.jpg 1024w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/09\/mit_liste-624x336.jpg 624w\" sizes=\"(max-width: 1033px) 100vw, 1033px\" \/><p id=\"caption-attachment-1449\" class=\"wp-caption-text\">mit_liste<\/p><\/div>\n<p>Aber da muss jeder selber t\u00fcfteln, was f\u00fcr seine Zwecke am besten geeignet ist. Fr\u00f6hliches googlen nach praktikablen Stringbehandlungen! Und nicht vergessen vor erneutem Starten des Skripts die Zieltabelle mit Truncate zu leeren, sonst f\u00e4llt der Insert wegen doppelter IDs auf die Nase.<\/p>\n<p>Nachtrag: den Truncate kann man nat\u00fcrlich auch ins Skript mit einbauen, einfach die Action um folgenden Code erg\u00e4nzen:<\/p>\n<pre>\/\/Zieltabelle leeren\r\n\u00a0\u00a0 \u00a0$sql_zap=\"TRUNCATE TABLE \".$zieltabelle.\"\";\r\n\u00a0\u00a0 \u00a0if (mysqli_query($conn, $sql_zap)) {\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0 echo \"Truncate erfolgreich&lt;br&gt;\";\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0else {\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0 echo \"Fehler beim Truncate: \" . mysqli_error($conn);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}<\/pre>\n<p>Das muss nat\u00fcrlich vor dem Insert rein, am Besten setzt man es ganz an den Anfang innerhalb der if(isset($_POST&#8230;)-Bedingung. Dann spart man sich das manuelle Leeren der Zieltabelle.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ich bin immer noch an den exportierten Posts aus WordPress, die wir im Q&amp;D-Editor schonmal manuell nachbearbeitet haben. Dabei sind sicher etliche Dinge aufgefallen, die man programmatisch korrigieren k\u00f6nnte, und wie man das praktisch angeht, schreib ich hier mal auf. Wir haben immer noch die Ausgangstabelle rezepte, in der nur die ID, der post_content und [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1,25,20,21,11,7,4,63,59],"tags":[],"_links":{"self":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/1443"}],"collection":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/comments?post=1443"}],"version-history":[{"count":11,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/1443\/revisions"}],"predecessor-version":[{"id":1456,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/1443\/revisions\/1456"}],"wp:attachment":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/media?parent=1443"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/categories?post=1443"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/tags?post=1443"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}