Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Come faccio a sostituire le 'entity html' solo se fuori dai tag?

    Ho la necessita' di estrarre una stringa HTML dal Db e vorrei che sia visualizzata correttamente.

    Questo e' quanto ho nel DB:

    codice:
    "questo è fra doppi apici"
    'fra apici singoli'
    link "fra doppi apici" link
    Il tutto deve diventare

    codice:
    &_quot;questo è fra doppi apici&_quot;
    &_039;fra apici singoli&_#039;
    link &_quot;fra doppi apici&_quot; link
    In sostanza i doppi apici che racchiudono "link.html" devono rimanere tali.
    Credo ci sia la possibilita' di non rimpiazzare il testo racchiuso tra < e > ma le espressioni regolari non sono decisamente il mio forte!

    E' possibile anche gestire tutti gli altri caratteri accentati?

    Grazie in anticipo!
    Ste
    Il saggio coltiva Linux poichè Windows si pianta da solo

  2. #2
    Questa volta, più che un voto.. è favoreggiamento.

  3. #3
    Utente di HTML.it L'avatar di span
    Registrato dal
    Jan 2004
    Messaggi
    1,644
    Non ho provato l'espressione, ma + o - dovrebbe funzionare

    Codice PHP:
    $mystring = <<<TEXT
    "questo è fra doppi apici"
    'fra apici singoli'
    [url="link.html"]link "fra doppi apici" link[/url]
    TEXT;

    // Converto tutto
    $mystring htmlentities($mystring);

    // Catturo tag e attributi
    preg_match_all('#<[^/>]+>#'$mystring$mytags);

    echo 
    str_replace($mytags[0], // Contiene i tag con entità convertite
      
    array_map('html_entity_decode'$mytags[0]), // Ritorna i tag con entità decodificate
      
    $mystring); // Sostituisce 

  4. #4
    Ciao span, grazie del suggerimento ma non funziona.

    Provo a semplificare la mia esigenza:

    Data la stringa
    codice:
    "stefano" link di prova
    Voglio, o meglio.... vorrei che il doppio apice prima e dopo stefano diventino entityhtml (quindi &_quot;, ovviamente senza l'underscore) mentre il doppio apice prima e dopo link di prova rimanga tale poiche' racchiuso nel tag A

    Qualche suggerimento?
    Il saggio coltiva Linux poichè Windows si pianta da solo

  5. #5
    Utente di HTML.it L'avatar di span
    Registrato dal
    Jan 2004
    Messaggi
    1,644
    Giusto. Prova questo...

    Codice PHP:
    $mystring = <<<TEXT
    "questo è fra doppi apici"
    'fra apici singoli'
    [url="link.html"]link "fra doppi apici" link[/url]
    TEXT;

    // Catturo i tag
    preg_match_all('#<[^>]+>#'$mystring$mytags);

    // Converto tutto
    $mystring htmlentities($mystring);

    if( 
    $mytags[0] ){ // Se ci sono tag

        
    $mystring str_replace(
          
    array_map('htmlentities'$mytags[0]), // Ritorna i tag codificati
          
    $mytags[0], // Contiene i tag senza entità convertite
          
    $mystring
        
    ); // Sostituisce
    }

    echo 
    $mystring

  6. #6

    Forse ho risolto

    So che c'e' senz'altro un modo molto piu' elegante e forse con un'espressione regolare ben assestata e molte meno righe di codice avrei potuto ottenere altrettanto, ad ogni modo questa funzione risolve il mio problema:

    codice:
      function showhtml($txt) {
        $trans = get_html_translation_table(HTML_ENTITIES);
        $trans['’'] = "&#039;";
        $txt = strtr($txt, $trans);  //-- Sostituisco tutte le entity nel corrispondente codice HTML
        preg_match_all("|(&lt;)[^>][\w]+(&gt;)|U", $txt, $match); //-- prendo tutte le stringhe racchiuse tra tag < .. >
        $src = array("&lt;","&gt;","&quot;","&#039;");  //-- ne sostituisco i codici html ...
        $dst = array("<",">","\"","'");  //-- ... nel corrispettivo char
        $match[2] = str_replace($src, $dst, $match[0]);
        $txt = str_replace($match[0], $match[2], $txt); //-- sostituisco le porzioni di stringa originale
        $txt = nl2br($txt); //-- converto i ritorni a capo in tag 
    
        return($txt);
      }
    Grazie ancora a span per il suggerimento di partenza

    Ste
    Il saggio coltiva Linux poichè Windows si pianta da solo

  7. #7
    eh beh! Grazie ancora "span"... questo e' cio' che definisco un modo elegante di scrivere codice. Complimenti!

    Mi son permesso di modificare l'istruzione
    codice:
    $mystring = htmlentities($mystring);
    con
    codice:
    $trans = get_html_translation_table(HTML_ENTITIES);
    $trans['’'] = "&#039;";
    $txt = strtr($txt, $trans);
    Quindi...

    codice:
    function showhtml($txt) {
    
      // Catturo i tag
      preg_match_all('#<[^>]+>#', $txt, $mytags);
      // Converto tutto
      $trans = get_html_translation_table(HTML_ENTITIES);
      $trans['’'] = "&#039;";
      $txt = strtr($txt, $trans);
    
      $txt = str_replace(
        array_map('htmlentities', $mytags[0]), // Ritorna i tag codificati
        $mytags[0], // Contiene i tag senza entità convertite
        $txt
      ); // Sostituisce
      $txt = nl2br($txt);
      return($txt);
    }
    Il saggio coltiva Linux poichè Windows si pianta da solo

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