Visualizzazione risultati 1 fino 13 di 13

Discussione: preg_replace() ed espressioni regolari con commenti nelle pagine html.

  1. #1
    Guest

    Predefinito preg_replace() ed espressioni regolari con commenti nelle pagine html.

    Allora ragazzi, ho finito il template engine, me lo sono adattato per fare quel che volevo e ci sono riuscito, ma manca, per ora l'ultima cosa.

    Vorrei cancellare i commenti nel sorgente della pagina, quindi non inserirli in cache nel caso ci siano.

    Ho questo codice in una funzione:
    Codice PHP:
    $code = implode("\n", $code_lines);
    preg_replace('#<!--(.*?)-->#', ' ', $code);
    return
    $code;
    ma non mi cancella tutto il contenuto tra i tag per commentare e i tag per commentare stessi.

    Grazie in anticpo

  2. #2
    Guest

    Predefinito

    Ovvio che se fai ritornare $code, che è la variabile su cui preg_replace() deve operare, è come se non l'avessi modificata. Prova questo:
    Codice PHP:
    $code = implode("\n", $code_lines);
    return
    trim(preg_replace('#<!--(.*?)-->#', ' ', $code));
    Ultima modifica di gabryhacker : 12-09-2009 alle ore 13.38.02

  3. #3
    Guest

    Predefinito

    Grazie mille, funziona, però solo se ho:
    Codice HTML:
    <!-- commento aosihopc -->
    ma se ho:
    Codice HTML:
    				<!--
    				<b style="border: 7px solid; display: block; float: left; margin: 2px 4px 0 0;border-color: #EDF1F5 #DDE0E4 #C6CBD3 #BABFC6; font-size: 0em;" title="Nessun nuovo messaggio"></b>
    				-->
    Non mi fa il replace, come posso fare?

    Grazie in ogni della risposta di ora

  4. #4
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    Di default, . trova tutti i caratteri tranne il newline.
    Puoi includere quest'ultimo attraverso il modificatore di criterio s.

    Codice:
    #<!--(.*)-->#s
    Ciao!
    Ultima modifica di programmazioned : 12-09-2009 alle ore 18.20.05

  5. #5
    Guest

    Predefinito

    Grazie, ma avevo risolto così:
    Codice PHP:
    return str_replace(array(' ', "\r"), '', preg_replace('#<!--(.*?)-->#', '', $code));
    Ascolta, se invece non voglio che il replace venga fatto ogni volta, in modo da utilizzare meno risorse, come posso creare la condizione?

    Ho provato:
    Codice PHP:
    $code = implode('', $code_lines);
    if(
    preg_match('#<!--(.*?)-->#s', $code, $m))
    {
    preg_replace('#<!--(.*?)-->#s', '', $code);
    }
    return
    str_replace(array(' ', "\r"), '', $code);
    ma non funziona!

  6. #6
    Guest

    Predefinito

    In che senso ogni volta? Scusa ma non ho capito bene cosa vuoi fare

  7. #7
    Guest

    Predefinito

    Allora, queste funzioni sono in un template engine.

    Siccome per ogni pagina visualizzata dovrei fare questo preg_replace(), vorrei creare una condizione che mi controlli se ci sono eventuali commenti, quindi con preg_match() e li cancelli con il codice postato prima.

    Capito?

  8. #8
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    La sostituzione verrebbe comunque effettuata solo se necessario, ulteriori controlli non avrebbero altro fine se non quello di peggiorare.

    Se sei proprio convinto di volerlo fare vai di strpos e simili, ma evita altre funzioni legate alle espressioni regolari.

    Ciao!

  9. #9
    Guest

    Predefinito

    Ritiro sul il topic per un problema. Dovrei creare un controllo con preg_match_all, ma ho un problema.

    Avendo un sorgente:
    Codice HTML:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="it" xml:lang="it">
    <head><title>Titolo</title>
    
    <script type="text/javascript">Contenuto script</script>
    
    <script type="text/javascript">
    
    Contenuto script 2
    
    </script>
    
    </head>
    <body>
    
    <script type="text/javascript">
    // <![CDATA[
    
    var form_name = 'postform';
    var text_name = 'message';
    var load_draft = false;
    var upload = false;
    
    // ]]>
    </script>
    Contenuto del sito
    </body>
    </html>
    Devo prima di tutto prendere il contenuto tra <script type="text/javascript"> e </script>, non fare alcuna operazione su questo (il famoso str_replace() che faccio, quello scritto in qualche post qui sopra) quindi lasciarlo così come è, mentre il resto fare tutto normalmente.

    Ho fatto questo:
    Codice PHP:
    <?php

    $file
    = file_get_contents('./a.htm');

    if(
    preg_match_all('#<script type="text/javascript">(.*)</script>#s', $file, $matches))
    {
    echo
    '<pre>';
    print_r($matches);
    echo
    '</pre>';
    }
    ?>
    E mi stampa:
    Codice HTML:
    <pre>Array
    (
        [0] => Array
            (
                [0] => <script type="text/javascript">Contenuto script</script>
                [1] => <script type="text/javascript">
    
    Contenuto script 2
    
    </script>
                [2] => <script type="text/javascript">
    // <![CDATA[
    
    var form_name = 'postform';
    var text_name = 'message';
    var load_draft = false;
    var upload = false;
    
    // ]]>
    </script>
            )
    
        [1] => Array
            (
                [0] => Contenuto script
                [1] => 
    
    Contenuto script 2
    
    
                [2] => 
    // <![CDATA[
    
    var form_name = 'postform';
    var text_name = 'message';
    var load_draft = false;
    var upload = false;
    
    // ]]>
    
            )
    
    )
    
    </pre>
    Però non ho capito se è giusto o meno. Devo fare in modo che il conenuto non venga passato in str_replace().

    Grazie ancora

  10. #10
    Guest

    Predefinito

    Certo che è giusto, basta che togli i valori con array_shift() o altre funzioni.

  11. #11
    Guest

    Predefinito

    Potrei usare array_shift() se anche il resto viene trattato come un array, ma se questo non lo fosse?

  12. #12
    Guest

    Predefinito

    se è una stringa mi vengono in mente tante funzioni, ma non ho capito se hai a che fare con un'array o quant'altro.

  13. #13
    Guest

    Predefinito

    Da quel che ho visto nella classe sembra includere il file del template e compilare!

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •