Jak mogę łatwo przekonwertować specjalne jednostki HTML ze standardowego strumienia wejściowego w systemie Linux?


9

CentOS

Czy istnieje prosty sposób na konwersję specjalnych jednostek HTML ze strumienia danych? Przesyłam dane do skryptu bash, a czasem dane te zawierają specjalne byty. Na przykład:

„test” i amp; test $ test! test @ # $% ^ & amp; *

Nie jestem pewien, dlaczego niektóre postacie pokazują się dobrze, a inne nie, ale niestety nie mam kontroli nad napływającymi danymi.

Myślę, że mogę tu użyć SED, ale wydaje się, że byłoby to uciążliwe i prawdopodobnie podatne na fałszywe alarmy. Czy istnieje polecenie dla Linuksa, które specjalizuje się w dekodowaniu tego typu danych?

Odpowiedzi:


9

PHP jest do tego dobrze dostosowane. Ten przykład wymaga PHP 5:

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

14

Perl jest (jak zawsze) twoim przyjacielem. Myślę, że to zrobi:

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

Na przykład:

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

Z wyjściem:

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

Działa to na moim laptopie OSX10.8 i hoście RHEL5.something.
Jason Tan,

Aby wydrukować plik w UTF-8, użyj binmode: echo "& laquo;" | perl -n -mHTML :: Entities -mutf8 -e 'binmode (STDOUT, ": utf8"); drukuj HTML :: Encje :: decode_entities ($ _); '
falstaff

6

recode wydaje się dostępne w domyślnych repozytoriach pakietów głównych dystrybucji GNU / Linux. Np. Aby zdekodować encje HTML do UTF-8:

…|recode html..utf8

2

Z Python 3:

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

0

Pobiera plik tekstowy ze standardowego wejścia:

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

Prawdopodobnie wymaga bash> = wersja 4

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.