如何在Linux中轻松地从标准输入流转换HTML特殊实体?


9

CentOS的

有没有简单的方法可以从数据流转换HTML特殊实体?我将数据传递到bash脚本,有时该数据包括特殊实体。例如:

“测试”和 测试$ test!测试@#$%^& *

我不确定为什么某些字符显示正常而其他字符却显示不正常,但是不幸的是,我无法控制传入的数据。

我想我也许可以在这里使用SED,但这似乎很麻烦,而且容易出现误报。我可以通过管道传输到专门解码此类数据的Linux命令吗?

Answers:


9

PHP非常适合于此。此示例需要PHP 5:

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

14

Perl(一如既往)是您的朋友。我认为这可以做到:

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

例如:

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

输出:

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

这适用于我的OSX10.8笔记本电脑和RHEL5.something主机。
詹森·谭

为了以UTF-8输出文件,请使用binmode:echo“«” | perl -n -mHTML :: Entities -mutf8 -e'binmode(STDOUT,“:utf8”); 打印HTML :: Entities :: decode_entities($ _);'
falstaff

6

在主要GNU / Linux发行版的默认软件包存储库中似乎可以使用recode。例如,将HTML实体解码为UTF-8:

…|recode html..utf8

2

使用Python 3:

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

0

从标准输入中获取文本文件:

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

它可能需要bash> =版本4

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.