ERLEDIGT
JA
JA
ANTWORTEN
20
20
ZUGRIFFE
2356
2356
EMPFEHLEN
-
03.11.06 11:01 #1
- Registriert seit
- Nov 2006
- Beiträge
- 13
Hallo. Ich brauche mal eure Hilfe.
Angenommen ich habe nen String in dem nun eine ganze Reihe von HTML-Tags stehen.
z.B.
In diesem Beispiel ist nen simpler HTML Code, der jedoch nicht XHTML Konform ist.PHP-Code:$html = '<a href="tutorials.de">Link</a><br><br />
<img src="abc.gif" /><p>Ein Absatz</p><hr><br /><input type="text">';
Meine Frage nun:
Wie müsste der Regex-Ausdruck heißen, damit nur die Tags (<hr>; <br>; <img>; <input> - also nur alleinstehende tags), die offen sind, geschlossen werden? Also dass aus dem oberen Beispiel
Mit dem Regex Ausdruck müsste lediglich nach bestimmten Tags gesucht werden - den Tag an sich auslesen - nachgucken ob an vorletzter Stelle ein "/" steht - wenn nicht an dieser stelle einfügen.PHP-Code:$html = '<a href="tutorials.de">Link</a><br /><br />
<img src="abc.gif" /><p>Ein Absatz</p><hr /><br /><input type="text" />';
Bitte versucht mir zu helfen. Danke!
Gruß
Matze
-
03.11.06 11:55 #2
Geht es nicht so?
PHP-Code:$html = '<a href="tutorials.de">Link</a><br><br />
<img src="abc.gif" /><p>Ein Absatz</p><hr><br /><input type="text">';
$suchstring = "<br>";
$xHtmlString = "<br />";
$html = str_replace ($suchstring,$xHtmlString,$html);
Sag niemals nie
-
03.11.06 12:00 #3
- Registriert seit
- Nov 2006
- Beiträge
- 13
Hallo danke für deine Antwort.
In diesem Fall würde es so gehen (also bei <br>).
Aber bei Input - bei dem der Tag-Content immer anders kann ich nicht str_replace nehmen.
Ich bin gerade so weit:
Das liefert mir zumindest alle Tags, die es zu ersetzen gilt - leider auch die, bei denen das Slash (z.B. <br />) schon vorhanden ist. Die müsste ich jetzt ausschließen können.PHP-Code:$shorttags = array('img', 'input', 'hr', 'br');
unset($ausgabe);
foreach ( $shorttags as $tag ) {
$pattern = "/<".$tag.".*?>/i";
preg_match_all($pattern, $html, $ausgabe[$tag]);
}
Dann der Replace...
-
03.11.06 12:05 #4
Wäre es denn so schlimm, wenn du auch diese noch mal ersetzt? Also aus einem <br /> einfach noch mal ein <br /> machst? Ist ein wenig unsauber programmiert, erspart dir aber eine Menge Zeit

Gruß
ChrisSag niemals nie
-
03.11.06 12:18 #5
- Registriert seit
- Nov 2006
- Beiträge
- 13
Folgender Code funktioniert zwar, aber ziemlich langsam...
Deshalb würde ich mich über eine preg_replace Lösung sehr sehr freuenPHP-Code:$shorttags = array('img', 'input', 'hr', 'br');
foreach ( $shorttags as $tag ) {
unset($ausgabe);
$pattern = "/<".$tag.".*?>/i";
preg_match_all($pattern, $html, $ausgabe);
foreach ( $ausgabe[0] as $replace ) {
if ( strpos($replace, '/>') == 0 ) {
$html = str_replace($replace, substr($replace, 0, strlen($replace)-1) . ' />', $html);
$html = str_replace('</'.$tag.'>', '', $html);
}
}
}
-
03.11.06 12:21 #6
jap. Ich kann dir auch sagen, was den ganzen Quatsch langsam macht. Das ist nicht das Replace. Das sind deine beiden ineinander verschachtelten Schleifen. Die machen das System langsam. Versuch dafür eine andere Lösung zu finden.
Sag niemals nie
-
03.11.06 12:44 #7
- Registriert seit
- Nov 2006
- Beiträge
- 13
Das einzige was mir in den Sinn kommt ist die Funktion array_walk - ist aber ähnlich langsam.
-
Ich kenn mich jetzt mit xml nicht aus ... Muss jeder Tag geschlossen werden, oder nur <hr>; <br>; <img>; <input> ?
-
03.11.06 12:59 #9
- Registriert seit
- Nov 2006
- Beiträge
- 13
Hallo.
In XML müssen alle Tags geschlossen werden. Dabei gibt es zwei Varianten:
und die Andere:HTML-Code:<b>Fetter Text/b>
Beide Tags gelten als geschlossen. In meinem Fall konzentriere ich mich auf die Tags im zweiten Beispiel (also br, hr, input, img).HTML-Code:<br />
Gruß
-
Versuchs mal hiermit:
Hier wird jetzt jedes <Tag> durch <Tag /> ersetzt. Ich weiß jetzt nicht genau ob du das so wolltest, wenn nicht kann man das auch noch anpassen.PHP-Code:preg_replace('|<(.*[^/])>|sU','<$1 />',$html);
Da ich auch nicht wirklich der RegEx-Profi bin, weiß ich auch nicht ob die Lösung so sauber ist, sie funktioniert jedenfalls, aber das hatt ja oft nix zu bedeuten.Geändert von soyo (03.11.06 um 13:31 Uhr)
-
03.11.06 13:36 #11
- Registriert seit
- Nov 2006
- Beiträge
- 13
Hey klasse. Das klappt soweit.jetzt müsste es möglich sein die 4 tags in einer abfrage reinzupacken. geht das?
ich glaube das war irgendwie so:
Vorsicht! Der Code funktioniert so nicht!
Weist du was ich meine?PHP-Code:$html = preg_replace('|<(input;br;hr;img)(.*[^/])>|sU','<(input;br;hr;img)$1 />',$html);
-
Ich bastel schon die ganze Zeit, ich schaff es nicht das mit einen regulären Ausdruck zu beschreiben. Aber ich gebe nicht auf
-
Also ich hab jetzt einiges probiert, aber ich bekomm es nicht mit einen regulären Ausdruck hin. Mit 2 schon.
Mit einen die hr- und br-Tags und mit einem anderen, die img und input-Tags.
Bitte schau sich das ma jemand an, der wirklich Ahnung davon hatt
achso hier der Scriptcode für img- und input-Tags:
PHP-Code:preg_replace('?<(img|input)(.*[^/])>?sU','<$1$2 />',$html);
Geändert von soyo (03.11.06 um 19:12 Uhr)
-
03.11.06 20:40 #14
- Registriert seit
- Nov 2006
- Beiträge
- 13
Ich danke dir vielmals für deine Hilfe und freue mich, dass du so engagiert dabei bist. Ich brauche die Hilfe echt - und regex ist das letzte wovon ich nen blassen habe

Also nach wie vor, danke!
-
04.11.06 14:42 #15Code :
1
preg_replace('?<(img|input|br|hr)(.*[^/])>?sU','<$1$2 />',$html);
Wieso sollte das nicht gehen ?Visit shadowmasta
Ähnliche Themen
-
RegEx HTML Tags+INHALT entfernen
Von ReggaePanda im Forum PHPAntworten: 13Letzter Beitrag: 17.07.10, 13:29 -
Problem mit preg replace
Von starfoxfs im Forum PHPAntworten: 2Letzter Beitrag: 01.09.09, 12:29 -
Preg-replace mit Ausnahmen
Von Wissenscoder im Forum PHPAntworten: 1Letzter Beitrag: 19.12.07, 14:07 -
HTML Tags schließen nach substr()
Von BobDerMeister im Forum PHPAntworten: 7Letzter Beitrag: 08.09.06, 20:23 -
HTML-Tags mit REGEX filtern, Problem
Von Act of Fate im Forum PHPAntworten: 1Letzter Beitrag: 20.09.04, 17:31





Zitieren
Login






[PHP][Snippet] Array zu XML konvertieren