Bagaimana saya dapat dengan mudah mengkonversi entitas khusus HTML dari aliran input standar di Linux?


9

CentOS

Apakah ada cara mudah untuk mengonversi entitas khusus HTML dari aliran data? Saya meneruskan data ke skrip bash dan terkadang data itu mencakup entitas khusus. Sebagai contoh:

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

Saya tidak yakin mengapa beberapa karakter muncul dengan baik dan yang lainnya tidak, tetapi sayangnya, saya tidak memiliki kendali atas data yang masuk.

Saya pikir saya mungkin bisa menggunakan SED di sini tapi sepertinya itu akan menjadi rumit dan mungkin rentan terhadap positif palsu. Apakah ada perintah Linux yang bisa saya gunakan untuk melakukan spesialisasi dalam decoding tipe data ini?

Jawaban:


9

PHP sangat cocok untuk ini. Contoh ini membutuhkan PHP 5:

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

14

Perl adalah (seperti biasa) teman Anda. Saya pikir ini akan melakukannya:

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

Misalnya:

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

Dengan output:

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

Ini berfungsi pada laptop OSX10.8 saya dan host RHEL5.something.
Jason Tan

Untuk menampilkan file dalam UTF-8, gunakan binmode: echo "& laquo;" | perl -n -mHTML :: Entitas -mutf8 -e 'binmode (STDOUT, ": utf8"); cetak HTML :: Entities :: decode_entities ($ _); '
Falstaff

6

recode tampaknya tersedia di repositori paket-paket default dari distribusi GNU / Linux utama. Misalnya untuk mendekode entitas HTML ke UTF-8:

…|recode html..utf8

2

Dengan Python 3:

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

0

Mengambil file teks dari stdin:

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

Mungkin perlu bash> = versi 4

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.