Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Utente di HTML.it L'avatar di daveus
    Registrato dal
    Apr 2005
    Messaggi
    34

    [php5?] pulizia del codice html? (tidy? replace?)

    salve amici!
    vi spiego cosa dovrei fare
    ho un sorgente html che proviene da un buffer salvato in una variabile; questo è un esempio

    $buffer = "<a href=\"pagina.php?davide=usa\" title=\"Cosa ''' ne '''' pensate?\"> programmazione php5?'\"\" ààà </a>";

    che dovrebbe essere convertito in:

    $buffer = "<a href=\"pagina.php&amp;amp;davide=usa\" title=\"Cosa &amp;comesichiama;&amp;quotsingolo;&amp;quotsingolo; ne &amp;quotsingolo;&amp;quotsingolo;&amp;quotsingolo; pensate&amp;amp;\"> programmazione php5&amp;amp;'\"\" &amp;agrave;&amp;agrave;&amp;agrave; </a>";

    in pratica: deve convertire le entity solo dei valori degli attributi

    href="-------qui-----"
    e tutto il testo fuori dai tag html
    <a>--------qui--------</a>

    dove sbatto la testa?
    Ciao, Davide

  2. #2
    htmlentities ^^
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  3. #3
    Utente di HTML.it L'avatar di daveus
    Registrato dal
    Apr 2005
    Messaggi
    34
    [supersaibal]Originariamente inviato da daniele_dll
    htmlentities ^^ [/supersaibal]
    leggere prima di rispondere?
    Ciao, Davide

  4. #4
    ehm ... ho capito ... allora devi usare delle espressioni regolari con preg_replace o preg_match_all ... e poi htmlentities o urlencode in base a quello che devi sistemare
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  5. #5
    Utente di HTML.it L'avatar di daveus
    Registrato dal
    Apr 2005
    Messaggi
    34
    [supersaibal]Originariamente inviato da daniele_dll
    ehm ... ho capito ... allora devi usare delle espressioni regolari con preg_replace o preg_match_all ... e poi htmlentities o urlencode in base a quello che devi sistemare [/supersaibal]


    le espressioni regolari le capisco + o -, a tentativi forse ce la faccio.. solo una cosa però
    come posso vedere se

    <questo......> è uguale a</questo>
    ?
    cioè un controllo di coppie

    a <div ......> deve corrispondere </div>
    come se fa?
    Ciao, Davide

  6. #6
    a te non serve DD

    in realtà devi fare tutt'altra cosa ...

    tirare fuori con una espressione regolare tutti i tag che hanno almeno un attributo con valore e poi lanciare un'espressione su questi tag per estrarre gli attributi

    un qualcosa del genere

    codice:
    preg_match_all('/<[a-z]+.+=.+>/i', $html, $arr);
    while(list(, $element) = each($arr[0])) {
      
      $old_element = $element;
      preg_match_all('/([a-z]+)="(.+)"/i', $element, $arr_element);
      
      while(list(, $attribute) = each($arr_element[0])) {
        
        $old_attribute = $attribute;
        $attribute = trim($attribute);
        
        // fai quello che devi fare ... ma fallo su $attribute
        // dentro $attribute[1] hai il nome dell'attribute mentre dentro $attribute[2] hai il valore.
        
        $element = str_replace($old_attribute, $attribute, $element);
        
      }
      
      $html = str_replace($old_element, $element, $html);
      
    }
    fai attenzione ... il codice non l'ho minimamente testato ... xo dovrebbe andare

    la prima espressione regolare estrae tutti i tag di apertura che contengono almeno 3 caratteri di cui quello in mezzo tra questi blocchi di caratteri sia un uguale ... (e quindi ci sta per forza un attributo ... o il tag è scritto male ) ... la seconda regexp tira fuori tutti gli attributi. Fai attenzione ... i valori devono essere racchiusi tra apici doppi altrimenti nun funzia nulla
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  7. #7
    Utente di HTML.it L'avatar di daveus
    Registrato dal
    Apr 2005
    Messaggi
    34
    [supersaibal]Originariamente inviato da daniele_dll
    a te non serve DD

    in realtà devi fare tutt'altra cosa ...

    tirare fuori con una espressione regolare tutti i tag che hanno almeno un attributo con valore e poi lanciare un'espressione su questi tag per estrarre gli attributi

    un qualcosa del genere

    codice:
    preg_match_all('/<[a-z]+.+=.+>/i', $html, $arr);
    while(list(, $element) = each($arr[0])) {
      
      $old_element = $element;
      preg_match_all('/([a-z]+)="(.+)"/i', $element, $arr_element);
      
      while(list(, $attribute) = each($arr_element[0])) {
        
        $old_attribute = $attribute;
        $attribute = trim($attribute);
        
        // fai quello che devi fare ... ma fallo su $attribute
        // dentro $attribute[1] hai il nome dell'attribute mentre dentro $attribute[2] hai il valore.
        
        $element = str_replace($old_attribute, $attribute, $element);
        
      }
      
      $html = str_replace($old_element, $element, $html);
      
    }
    fai attenzione ... il codice non l'ho minimamente testato ... xo dovrebbe andare

    la prima espressione regolare estrae tutti i tag di apertura che contengono almeno 3 caratteri di cui quello in mezzo tra questi blocchi di caratteri sia un uguale ... (e quindi ci sta per forza un attributo ... o il tag è scritto male ) ... la seconda regexp tira fuori tutti gli attributi. Fai attenzione ... i valori devono essere racchiusi tra apici doppi altrimenti nun funzia nulla [/supersaibal]
    fosse così semplice! devo individuare tutti i tag, non solo gli attributi, altrimenti anche </a> mi viene fatto con le entities...

    $buffer = "<div id=\"asd\" class=\"prova\">";
    preg_match_all("/<([a-z]+)(\ [a-z]+\=\"(.*)\")*>/is",$buffer,$resarray);

    guarda un po' che mi fa questo :master:
    Ciao, Davide

  8. #8
    hai provato il mio codice? ^^

    tu devi individuare i tag che hanno attributi ... estrarre gli attributi e sistemarli con htmlentities ^^
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  9. #9
    Utente di HTML.it L'avatar di daveus
    Registrato dal
    Apr 2005
    Messaggi
    34
    [supersaibal]Originariamente inviato da daniele_dll
    hai provato il mio codice? ^^

    tu devi individuare i tag che hanno attributi ... estrarre gli attributi e sistemarli con htmlentities ^^ [/supersaibal]
    si, ma non si potrebbe fare con una sola espressione regolare?
    poi, il testo normale (fuori dai tag) come lo faccio?
    Ciao, Davide

  10. #10
    beh ... con una sola espressione regolare no ne hai bisogno, sempre, due

    con la prima estrai i tag e con la seconda estrai gli attributi ... non credo ci siano altri sistemi

    per quanto riguarda il testo che non sta tra tag ... beh ... è un po una rottura :\

    potresti provare con un qualcosa del tipo

    preg_match_all('/>(.+?)</si', .....)

    cosi, FORSE, funziona
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

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 © 2025 vBulletin Solutions, Inc. All rights reserved.