vor strip_tags() Leerzeichen zwischen alle TAGs hinzufügen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
aluminium
artikel
beginnen
bleiben
code
element
entfernen
ergebnis
ersetzung
farbe
first
funktion
holz
string
strip
tag
umbruch
url
wort
zeichen
-
Hallo
wenn ich einen HTML-tag/code">Code mit strip-tags() zu reinem text machen will,
dann bekomme ich oft einen String, in dem (wichtige) Leerzeichen zwischen den TAG Elementen fehlen
BSP
<p>Artikel Titel</p>
<ul>
<li>Farbe ist blau</lI>
<li>die Größe ist riesig</li>
<li>Material ist Aluminium</li>
</ul>
ergibt mit strip_tags()
$str = "Artikel TitelFarbe ist blaudie Größe ist riesigMaterial ist Aluminium";
gewünscht iat aber ein Ergebnis wie
$str = "Artikel Titel Farbe ist blau die Größe ist riesig Material ist Aluminium";
jetzt bräuchte ich wohl einen preg_replace()
um bei jedem TAG ein Leerzeichen einzufügen
wenn dabei auch mal mehrere Leerzeichen entstehen, kein Problem
denn mehrfache Leerzeichen kann man leicht zu einem ersetzen
aber fehlende kann man eben nicht (nachträglich) rein-zaubern
auch nicht mit Suche nach Gross-Buchstaben, da manche Elemente mit Klein-Buchstaben beginnen
wie müsste ein preg_replace() aussehen
um bei jedem HTML Tag innerhalb des TAGs ein Leerzeichen einzufügen
damit bei strip_tags() die Worte aus verschiedenen Elementen nicht zu einem Wort verschmelzen ??
EDIT: hab was gefunden !!!
... http://www.php.net/manual/de/function.strip-tags.php#100995
und ein bichen erweitert ...
besser als strip_tags ist wohl mit preg_replace
<?php // ---- Quellcode mit Umbruch ---- $htmlcode = ' <p>First line</p> <a href="foo">bar</a> <p>Second line</p> <a href="foo">bar</a> <p>Third line</p> '; $striped1 = strip_tags ($htmlcode); $striped2 = preg_replace ('/<[^>]*>/', ' ', $htmlcode); $rspaced = $striped2; // ---- Umbruch entfernen --- evtl nur \n ---- $rspaced = str_replace("\r\n", "", $rspaced); // ---- Mehrfache Leerzeichen entfernen ---- $rspaced = trim(preg_replace('/ {2,99}/', ' ', $rspaced)); echo "<pre>\r\n"; echo "strip_tags(): \r\n" . $striped1. "\r\n"; echo "Mit Regexp: \r\n" .$striped2. "\r\n"; echo "Spaced: \r\n" .$rspaced. "\r\n"; echo "</pre>\r\n"; ?>
Ausgabe:
strip_tags(): First line bar Second line bar Third line Mit Regexp: First line bar Second line bar Third line Spaced: First line bar Second line bar Third line
man beachte die Leerzeichen bei Mit Regexp
besser :) ... oder ? ... andere Ideen ?
Beitrag zuletzt geändert: 11.11.2011 17:04:30 von osuche -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hey ;)
osuche schrieb:
man beachte die Leerzeichen bei Mit Regexp
Nur zu den Leerzeichen... :)
$rspaced = trim(preg_replace('/ {2,99}/', ' ', $rspaced));
Wenn du in den geschwungenen Klammern {2,} schreibst, geht es von 2 bis unendlich. Denn was ist, wenn du (zugegeben unrealtisitscher Weise) mehr als 99 Leerzeichen hast... Dann bleiben die einfach drinnen...
Eine Alternative wäre auch das "+", das angibt, dass es mindestens 1 sein soll... "Ab mindestens einem Leerzeichen ersetze es durch genau ein Leerzeichen. (Ist aber vermutlich nicht so performant...)
Daher empfehle ich:
$rspaced = trim(preg_replace('/ {2,}/', ' ', $rspaced));
Ansonsten ist es eine nette Lösung ;)
lg
Sincer -
Hallo
nagut, beser unendlich als 99
jetzt wundert mich aber, warum die Ersetzung NICHT mit einem Minus-Zeichen funktioniert ?!
$str = preg_replace('/-{2,}/', '-', $str);
damit bleiben mehrfache Minus-Zeichen ---- im String ?!
hä?
EDIT ach ich habs .. das Minus-Zeichen escapen,
weil es ja eine "Funktion" von-bis im Ausdruck hat
$str = preg_replace('/\-{2,}/', '-', $str);
alles kalr :) ... ich schick Antwort trotzdem ab,
vielleicht hilft es ja auch noch Anderen
die mehrfache "Minus" Zeichen zu einem machen wollen
Beitrag zuletzt geändert: 12.11.2011 14:59:02 von osuche -
sehr nützlich,
hier das ganze nochmal als Funktion: remove_tags()
// ------------------------------------------------------ function remove_tags($string) { // ----- remove HTML TAGs ----- $string = preg_replace ('/<[^>]*>/', ' ', $string); // ----- remove control characters ----- $string = preg_replace('/[\n\r\t]/',' ',$string); // ----- remove multiple spaces ----- $string = trim(preg_replace('/ {2,}/', ' ', $string)); return $string; } // ------------------------------------------------------
Anwendung (Beispiel)
$html = ' <div> <p style="color:blue;">Farbe ist blau</p><p>Größe ist <span style="font-size:200%;">riesig</span></p> <p>Material ist Holz</p> </div> ';
Ergebnis mit: $str = stip_tags($html);
Farbe ist blauGröße ist riesig Material ist Holz
... die Worte 'blau' und ' Größe' sind zusammen: 'blauGröße'
und der Zeilenumbruch ist noch da.
Ergebnis mit: $str = remove_tags($html);
Farbe ist blau Größe ist riesig Material ist Holz
... jetzt immer mit Abstand zwischen Tags und ohne Zeilenumbruch
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage