Come posso facilmente convertire entità speciali HTML da un flusso di input standard in Linux?


9

CentOS

Esiste un modo semplice per convertire entità speciali HTML da un flusso di dati? Sto passando i dati a uno script bash e a volte quei dati includono entità speciali. Per esempio:

"test" & amp; test $ test! test @ # $% ^ & amp; *

Non sono sicuro del motivo per cui alcuni personaggi si presentano bene e altri no, ma sfortunatamente non ho il controllo dei dati in arrivo.

Sto pensando che potrei essere in grado di utilizzare SED qui, ma sembra che sarebbe ingombrante e probabilmente incline a falsi positivi. Esiste un comando Linux su cui posso eseguire il pipe specializzato nella decodifica di questo tipo di dati?

Risposte:


9

PHP è adatto a questo. Questo esempio richiede PHP 5:

cat file.html | php -R 'echo html_entity_decode($argn);'

14

Perl è (come sempre) tuo amico. Penso che questo lo farà:

perl -n -mHTML::Entities -e ' ; print HTML::Entities::decode_entities($_) ;'

Per esempio:

echo '"test" & test $test ! test @ # $ % ^ & *' |perl -n -mHTML::Entities -e ' ; print HTML::Entities::decode_entities($_) ;'

Con uscita:

someguy@somehost ~]$ echo '"test" & test $test ! test @ # $ % ^ & *' |perl -n -mHTML::Entities -e ' ; print HTML::Entities::decode_entities($_) ;'
"test" & test $test ! test @ # $ % ^ & *

Funziona sul mio laptop OSX10.8 e su un host RHEL5.something.
Jason Tan,

Per generare il file in UTF-8, usa binmode: echo "& laquo;" | perl -n -mHTML :: Entità -mutf8 -e 'binmode (STDOUT, ": utf8"); print HTML :: Entities :: decode_entities ($ _); '
falstaff,

6

recode sembra disponibile sui repository di pacchetti predefiniti delle principali distribuzioni GNU / Linux. Ad esempio per decodificare entità HTML in UTF-8:

…|recode html..utf8

2

Con Python 3:

python3 -c 'import html,sys; print(html.unescape(sys.stdin.read()), end="")' < file.html

0

Prende il file di testo da stdin:

#!/bin/bash
#
while read lin; do
  newl=${lin//&gt;/>}
  newl=${newl//&lt;/<}
  newl=${newl//&amp;/<}
  # ...other entites
  echo "$newl"
done

Probabilmente ha bisogno di bash> = versione 4

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.