Wie kann ich HTML-Spezialentitäten einfach aus einem Standardeingabestream unter Linux konvertieren?


9

CentOS

Gibt es eine einfache Möglichkeit, spezielle HTML-Entitäten aus einem Datenstrom zu konvertieren? Ich übergebe Daten an ein Bash-Skript und manchmal enthalten diese Daten spezielle Entitäten. Zum Beispiel:

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

Ich bin mir nicht sicher, warum einige Zeichen gut angezeigt werden und andere nicht, aber leider habe ich keine Kontrolle über die eingehenden Daten.

Ich denke, ich könnte SED hier verwenden, aber das scheint umständlich und möglicherweise anfällig für Fehlalarme zu sein. Gibt es einen Linux-Befehl, an den ich weiterleiten kann und der sich auf das Dekodieren dieser Art von Daten spezialisiert hat?

Antworten:


9

PHP ist dafür gut geeignet. Dieses Beispiel erfordert PHP 5:

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

14

Perl ist (wie immer) dein Freund. Ich denke, das wird es tun:

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

Z.B:

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

Mit Ausgabe:

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

Dies funktioniert auf meinem OSX10.8-Laptop und einem RHEL5-Host.
Jason Tan

Verwenden Sie binmode: echo "& laquo;", um die Datei in UTF-8 auszugeben. | perl -n -mHTML :: Entities -mutf8 -e 'binmode (STDOUT, ": utf8"); print HTML :: Entities :: decode_entities ($ _); '
Falstaff

6

recode scheint in Standardpaket-Repositorys der wichtigsten GNU / Linux-Distributionen verfügbar zu sein. Zum Beispiel, um HTML-Entitäten in UTF-8 zu dekodieren:

…|recode html..utf8

2

Mit Python 3:

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

0

Nimmt Textdatei von stdin:

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

Es braucht wahrscheinlich bash> = Version 4

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.