Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    15

    Eliminare spazi bianchi nei tag html con le Espressioni Regolari

    Il problema nasce dal voler visualizzare gli spazi bianchi immessi in una textarea.
    L'HTML considera 2 o piu' spazi biachi come uno solo..
    per ovviare a cio' ho usato il codice html -> & n b s p ; <- (senza spazi).
    L'esito dell'operazione è quello voluto ma insorge un problema:
    Anche all'interno dei tags html il carattere di spazio viene parsato in & n b s p; e questo annulla il riconiscimento da parte del browser dei tags HTML.
    Il mio problema è quindi sostituire solamente all'interno dei tag che iniziano con < e terminano con > il codice -> & n b s p ; <- con uno spazio bianco " ".

    Ho pensato di avvelermi delle REGEX + ereg_replace per risolvere il problema ma non sono assimilabili velocemente e non posso studiarle ora (anche se sara' necessario in futuro).. per questo vi posto la mia richiesta di aiuto.

    Thx in anticipo !!

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    15
    uppete

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    15
    opla

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    15
    Siccome non ho ricevuto neanche una risposta.. e sono molto dispiaciuto..
    mi sono arrangiato con una funzione che non sfrutta le espressioni regolari so..

    Codice PHP:
    function delSpaziNeiTag($str)
    {
      
    $indice=0;
      while(
    $indice strlen($str)) //cicla finchè l'indice non supera la lunghezza della stringa
      
    {

        
    $pos1 strpos($str'<'$indice); // ricava posione di <
        
    $pos2 strpos($str'>'$indice); // ricava pos di >

        
    $tag substr($str$pos1$pos2 $pos1 1); // estrapola tag delimitato da < e >
        
    $new_tag str_replace('',' ',$tag); // sostituisci nel tag &nbsp con ' '
        
    $str str_replace($tag$new_tag$str);  // sostituisci il nuovo tag nella stringa
        
    $indice $pos2 1// sposta indice in avanti
      
    }
      return 
    $str;
    }

    echo
    "<hr>";

    echo 
    $str1 "ciaoadessoscrivounlink[url='#']ciao[/url]";
    echo
    "
    "
    ;
    echo 
    delSpaziNeiTag($str2); 
    Se fate girare lo script si puo' notare come la prima stampa della stringa $str1 non permette al browser di riconoscere il tag <a href='#'> in quanto c'è il codice & n b s p ; di mezzo..
    mentre se viene parsata dalla funzione il link appare in tutto il suo splendore !!

    Ai posteri l'utilità di questa funzione !!

  5. #5
    ma hai provato a fare:

    Codice PHP:
    echo "<pre>$str</pre>"

    ??
    Ciao!

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    15
    no..perchè così i tag html non vengono processati dal browser ma stamperebbe solo la stringa..

  7. #7

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    15
    hai ragione !! ero convinto che no..!
    Stavo per dire che il carattere monospace è proprio brutto.. ma si puo' facilmente cambiare così:

    codice:
    <pre style='font-family: Verdana;'></pre>
    In più prende anche il carattere newline, quindi addio nl2br()..
    arg! sto rosicando perchè nn avevo consideraro il pre!! cmq thx!!

    Per completezza pero' riposto la funzione sollevata da un piccolo bug:
    Codice PHP:
    function delSpaziNeiTag($str)
    {
      
    $indice=0;
      while(
    $indice strlen($str)) //cicla finchè l'indice non supera la lunghezza della stringa
      
    {

        
    $pos1 strpos($str'<'$indice);  // ricava posione di <
        
    $pos2 strpos($str'>'$indice); // ricava pos di >

        
    $tag substr($str$pos1$pos2 $pos1 1);// estrapola tag delimitato da < e >
        
    $new_tag str_replace('',' ',$tag);   // sostituisci nel tag &nbsp con ' '
        
    $str str_replace($tag$new_tag$str);   // sostituisci il nuovo tag nella stringa
        
    $pos2 $indice $pos2 $indice++;   // sposta indice in avanti
      
    }
      return 
    $str;
    }


    echo 
    $str1 "ciaoadessoscrivounlink[url='#']ciao[/url]";
    echo
    "
    "
    ;
    echo 
    delSpaziNeiTag($str1); 

  9. #9
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,361
    Originariamente inviato da mave_
    Siccome non ho ricevuto neanche una risposta.. e sono molto dispiaciuto..
    ...

    Forse c'è il pattern da modificare per gestire il multi righe.
    codice:
    <?php 
    
    $string      = "<b& nbsp;& nbsp;& nbsp;>pippo& nbsp;& nbsp;& nbsp;pluto</b& nbsp;& nbsp;>
    <center& nbsp;& nbsp;& nbsp;>pippo& nbsp;& nbsp;& nbsp;pluto</center& nbsp;& nbsp;>";
    
    //-------- Prendo tutti i tags della pagina
    $pattern     = "#(<[^>]*>)#";
    preg_match_all($pattern, $string, $out);
    
    //-------- Li metto in un array
    $initValues  = $out[1];
    
    //-------- X ogni elemento dell'array rimpiazzo 
    //         e assegno in un altro array
    $finalValues = array();
    foreach($initValues as $key => $value) {
     $value             = str_replace("& nbsp;", " ", $value);
     $finalValues[$key] = $value;
    } // foreach($initValues as $key => $value)
    
    $string             = str_replace($initValues ,$finalValues, $string);
    print $string;
    
    ?>
    Togliere lo spazio tra & e nbsp;

    Non so come mai ma $pattern = "#(<[^>]*>)#"; non c'è nessun spazio tra l'ultimo > e )
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    15
    very thx !! a breve testero' !!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.