2012-10-19 37 views
8

Ho un file HTML e al suo interno potrebbero esserci Javascript, PHP e tutto ciò che le persone possono o non possono inserire nel loro file HTML.Ricerca di commenti in HTML

Voglio estrarre tutti i commenti da questo file html.

posso sottolineare due problemi nel fare questo:

  1. Che è un commento in una lingua non può essere un commento in un altro.

  2. In Javascript, il resto delle righe viene commentato utilizzando il contrassegno //. Ma gli URL contengono anche // all'interno di essi e quindi posso eliminare parti di URL se I si applica solo sostituendo // e quindi il resto della riga senza niente.

Quindi questo non è un problema banale.

C'è qualche soluzione per questo già disponibile?

Qualcuno ha già fatto questo?

+3

Hai ragione che questo non è banale. Per rimuovere in modo affidabile i commenti, è necessario analizzare completamente il file (PHP, HTML e Javascript). Suggerisco di lavorare in PHP, se possibile; mentre mi piace il Perl, gli strumenti PHP per lavorare su se stessi sono migliori degli strumenti Perl per lavorare su PHP. Ecco qualcosa per iniziare: http://stackoverflow.com/questions/503871/best-way-to-automatically-remove-comments-from-php-code. Quindi devi solo trovare i parser HTML e javascript in PHP per fare altrettanto per quelle parti del file. – dan1111

+0

Perché dovresti avere PHP nel tuo file HTML? Ho solo CSS, JavaScript e HTML, quindi Google "HTML Minifier" per prodotti che possono rimuovere commenti, spazi bianchi e, in generale, "snellire" le pagine. –

+1

@RB. Pre-renderizzato? – Jivings

risposta

0

Dalla tua parola sembra che tu stia riflettendo su un approccio basato su espressioni regolari: è un dolore farlo sull'intero file, provare a utilizzare alcuni strumenti per evidenziare o per scartare testo interessante o non interessante e poi lavorare su ciò che è rimasto dal tuo setaccio secondo i criteri di conservazione/rigetto. Dai un'occhiata a HTML :: Tree e TreeBuilder, potrebbe essere molto utile trattare il codice HTML.

2

Problema 2: non tutti gli URL sono citati, con "www.url.com" o "www.url.com", quando lo si scrive in entrambe le lingue? Non ne sono sicuro. Se questo è il caso, tutto ciò che si ha a che fare è analizzare il codice e verificare se sono presenti virgolette che precedono i backslash per sapere se si tratta di un url reale o solo di un commento.

+0

Questo è ciò che sto facendo in questo momento. –

+0

Quindi hai risolto il problema? Se no (forse non ho capito bene la tua domanda), qual è il problema? :) –

1

Cerca nei generatori di parser come ANTLR che contiene grammatiche per many languages e scrive un parser di nidificazione per trovare i commenti in modo affidabile. Le espressioni regolari non ti aiuteranno se la precisione è importante. Anche allora, non sarà preciso al 100%.

consideri

Problema 3, un commento in una lingua non è sempre un commento in una lingua.

<textarea><!-- not a comment --></textarea> 
<script>var re = /[/*]not a comment[*/]/, str = "//not a comment";</script> 

Problema 4, un commento incorporato in una lingua potrebbe non essere ovviamente un commento.

<button onclick="&#47;&#47; this is a comment//&#10;notAComment()"> 

Problema 5, che cos'è un commento può dipendere da come è configurato il browser.

<noscript><!-- </noscript> Whether this is a comment depends on whether JS is turned on --> 
<!--[if IE 8]>This is a comment, except on IE 8<![endif]--> 

ho dovuto risolvere questo problema in parte per i sistemi di templating contestuali che Elide commenti dal codice sorgente per evitare perdite di software dettagli di implementazione.

https://github.com/mikesamuel/html-contextual-autoescaper-java/blob/master/src/tests/com/google/autoesc/HTMLEscapingWriterTest.java#L1146 mostra un banco di prova in cui un commento è identificato in JavaScript e le testcases successive mostrano commenti identificati in CSS e HTML. Potresti essere in grado di adattare quel codice per trovare i commenti.Non gestirà i commenti nelle sezioni di codice PHP.

0

Vorrei convertire il file HTML in un array di caratteri e analizzarlo. È possibile rilevare stringhe di chiavi come "<", "-", "www", "http", mentre ci si sposta in avanti e saltare o eliminare tali segmenti.

Gli indici di inizio/fine dovranno essere identificati correttamente, che è una sfida ma si avrà piena potenza.

Ci sono anche altri modi per semplificare il processo se le prestazioni non sono un problema. Ad esempio, tutti i tag possono essere acquisiti con XML :: Twig e la stringa può essere analizzata per rilevare i commenti JS.