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

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

CentOS

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

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

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

我想我也许可以在这里使用 SED,但这似乎很麻烦,而且可能容易出现误报。有没有一个 Linux 命令可以专门解码这种类型的数据?

答案1

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

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

答案2

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 @ # $ % ^ & *

答案3

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

…|recode html..utf8

编辑:初始仓库看起来没有维护,可以找到更新的分支这里

答案4

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

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

它可能需要 bash >= 版本 4

相关内容