Visualizzazione dei risultati da 1 a 9 su 9

Discussione: Rimuovere tag HTML

  1. #1
    Utente di HTML.it L'avatar di Sidur
    Registrato dal
    May 2005
    Messaggi
    29

    Rimuovere tag HTML

    Ciao a tutti, sto cercando di creare un semplice script perl che isoli il testo "utile" di una pagina HTML. Per farlo ho provato a rimuovere i tag html da un file di testo, attraverso le espressioni regolari.

    Siccome devo isolare il contenuto, devo eliminare completamente tag come <script> e tutto quello che contengono, quindi incontro un problema di multilinea.

    Il primo tentativo che ho fatto è stato s/<.*?>//g;
    ma il contenuto del tag script rimane.
    Ovviamente s/<script.*?/script>//; nella maggior parte dei casi non funziona perché è multilinea. Come posso fare?

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Dipende da come hai acquisito il file in memoria.

    Comunque devi usare /s nella RegExp per farla eseguire su righe multiple (nel tuo caso /ms ).
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  3. #3
    Ritengo che sia meglio usare il modulo HTML::Parser che trovi su http://search.cpan.org
    Marco Allegretti
    shishii@tiscalinet.it
    Lang: PERL, PHP, SQL.
    Linux user n° 268623 Fedora Core 10, Fedora Core 6, Debian Sarge on mips

  4. #4
    Utente di HTML.it L'avatar di Sidur
    Registrato dal
    May 2005
    Messaggi
    29
    Con HTML::Parser non mi ci sono raccapezzato molto, quindi ho continuato con lo script più semplice.

    Praticamente ho fatto:

    while(<>) {
    chomp;
    s/<script.*?\/script>//i;
    s/<.*?>//;
    print;
    }

    e gli passo attraverso la linea di comando il file html.
    Lo script mi toglie tutti gli "accapi" e poi mi toglie tutti i tag. La sostituzione del contenuto del tag script continua a non eseguirla. Perché?
    A questo punto non dovrei aver bisongo di /m, perché è tutto su una linea sola...

  5. #5
    con "chomp" hai tolto i caratteri di fine riga, ma le stesse vengono ancora analizzate una per volta, nel senso che dentro "$_" (la variabile di default che tu utilizzi quando scrivi while (<>)) c'è ancora solo una riga ogni ciclo.
    Marco Allegretti
    shishii@tiscalinet.it
    Lang: PERL, PHP, SQL.
    Linux user n° 268623 Fedora Core 10, Fedora Core 6, Debian Sarge on mips

  6. #6
    Utente di HTML.it L'avatar di Sidur
    Registrato dal
    May 2005
    Messaggi
    29
    Alla fine ho risolto così:

    applico un primo script che fa chomp sul testo e lo salva in un altro file.
    Dopo di che prendo questo secondo file e gli applico un secondo script che gli toglie il tag <script> e tutto il contenuto che ormai è in linea.

    Ok, funziona, però non è molto bello. Come potrei ottimizzare tutto ciò? Non potrei gestire meglio $_ per togliergli gli accapi?

    Grazie

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Non devi metterlo in un altro file, ma in una varibile, che deve contenere tutto il file.

    Quindi:
    my $tuttofile = '';
    while(<> ) {
    $tuttofile += $_;
    }

    $tuttofile =~ s/<.*?>//gs;
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  8. #8
    Utente di HTML.it L'avatar di Sidur
    Registrato dal
    May 2005
    Messaggi
    29
    Ok, funziona, però ho usato .= invece di += non so perché ma funziona solo così...

    Grazie mille a tutti!!

    Sidur

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Opps...
    errore mio. Sono le piccole differenze tra linguaggi diversi.

    In effetti in Perl la concatenazione si fa con l'operatore .
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

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.