kostenloser Webspace werbefrei: lima-city


vor strip_tags() Leerzeichen zwischen alle TAGs hinzufügen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    osuche

    osuche hat kostenlosen Webspace.

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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
  4. Autor dieses Themas

    osuche

    osuche hat kostenlosen Webspace.

    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
  5. 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

  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!