2012-10-13 9 views

risposta

25

L'escape di HTML comporta solo la sostituzione di tre caratteri: <, > e &. Per i punti extra, puoi anche sostituire " e '. Quindi, non è una lunga sed script:

sed 's/&/\&amp;/g; s/</\&lt;/g; s/>/\&gt;/g; s/"/\&quot;/g; s/'"'"'/\&#39;/g' 
+0

sembra bello, grazie –

+0

@JamesEvans: Di niente! – ruakh

+0

+1 per eleganza ed efficienza. Dovresti pubblicare la tua risposta qui: http://stackoverflow.com/questions/5929492/bash-script-to-convert-from-html-entities-to-characters dove raccomandano l'installazione di 'recode',' perl', 'php ',' xmlsarlet' e 'w3m' (un browser web per gridare forte). L'ultima risposta consiglia l'uso di Python3, che sebbene sia installato di default (almeno in Ubuntu) è eccessivo. – WinEunuuchs2Unix

-1

non posso commentare ancora, quindi ecco una nuova risposta:

Il precedente sostituzione sed deturpa uscita valida come

&lt; 

in

&amp;lt; 

Aggiunta di uno sgancio negativo così "&" è solo modificato in "& amp;" se "&" non è già seguito da "amp;" correzioni:

sed 's/&(?!amp;)/\&amp;/g; s/</\&lt;/g; s/>/\&gt;/g; s/"/\&quot;/g; s/'"'"'/\&#39;/g' 
+5

Grande errore. Quando codifico in HTML una stringa '&', è perché voglio che venga reso da qualche browser come '&'. Questo è il motivo per cui ** deve ** essere trasformato in '& amp;'. In questo modo, la codifica HTML e la decodifica HTML sono in equilibrio. Non si sopprime la codifica HTML solo perché l'input _looks like_ è già stato codificato in HTML. La codifica HTML è ** non ** idempotente. Non riuscendo a capirlo, alla fine porta a vulnerabilità XSS. –

+1

@Ruud ha ragione; il modo giusto per farlo è quello di fuggire prima e commerciale, come nella risposta di ruakh. –

+1

Sono totalmente d'accordo con ciò che @Ruud ha detto tranne che avrebbe dovuto enfatizzare ** l'incapacità di cogliere che porta alle vulnerabilità XSS ** – kmkaplan

5

È possibile utilizzare recode utility:

echo 'He said: "Not sure that - 2<1"' | recode ascii..html 

uscita:

He said: &quot;Not sure that - 2&lt;1&quot; 
+0

Probabilmente non disponibile se non ci sono Python/Ruby/Perl. – tbodt

Problemi correlati