在Bash中逃避HTML的简短方法?

时间:2012-10-13 13:43:35

标签: bash html-entities

该框没有Ruby / Python / Perl等。

bashsedawk

一种方法是用地图替换字符,但它变得乏味。

也许我不知道一些内置功能?

5 个答案:

答案 0 :(得分:39)

转义HTML实际上只涉及替换三个字符:<>&。对于额外积分,您还可以替换"'。所以,它不是一个很长的sed脚本:

sed 's/&/\&amp;/g; s/</\&lt;/g; s/>/\&gt;/g; s/"/\&quot;/g; s/'"'"'/\&#39;/g'

答案 1 :(得分:7)

您可以使用recode实用程序:

    echo 'He said: "Not sure that - 2<1"' | recode ascii..html

输出:

    He said: &quot;Not sure that - 2&lt;1&quot;

答案 2 :(得分:1)

纯bash,无外部程序:

function htmlEscape () {
    s=${1//&/&amp;}
    s=${s//</&lt;}
    s=${s//>/&gt;}
    s=${s//'"'/&quot;}
    echo $s
}

只是简单的字符串替换。

答案 3 :(得分:0)

或使用xmlstar Escape/Unescape special XML characters

$ echo '<abc&def>'| xml esc
&lt;abc&amp;def&gt;

答案 4 :(得分:-3)

之前的sed替换会破坏有效的输出,如

&lt;

&amp;lt;

添加一个负面的预先设置&#34;&amp;&#34;只会变成&#34;&amp; amp;&#34;如果那&#34;&amp;&#34;并没有跟随&#34; amp;&#34;解决了:

sed 's/&(?!amp;)/\&amp;/g; s/</\&lt;/g; s/>/\&gt;/g; s/"/\&quot;/g; s/'"'"'/\&#39;/g'