45

盒子里没有 Ruby/Python/Perl 等。

只有bash,sedawk

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

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

4

6 回答 6

66

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

sed 's/&/\&amp;/g; s/</\&lt;/g; s/>/\&gt;/g; s/"/\&quot;/g; s/'"'"'/\&#39;/g'
于 2012-10-13T13:49:01.500 回答
13

您可以使用recode实用程序:

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

输出:

    He said: &quot;Not sure that - 2&lt;1&quot;
于 2016-01-27T14:36:43.707 回答
8

纯 bash,没有外部程序:

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

只是简单的字符串替换。

于 2018-09-29T16:45:21.403 回答
2

or use xmlstar Escape/Unescape special XML characters:

$ echo '<abc&def>'| xml esc
&lt;abc&amp;def&gt;
于 2019-06-07T09:04:47.153 回答
0

I'm using jq:

$ echo "2 < 4 is 'TRUE'" | jq -Rr @html
2 &lt; 4 is &apos;TRUE&apos;
于 2022-02-20T05:42:54.703 回答
-5

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

&lt;

进入

&amp;lt;

添加负前瞻,因此“&”仅更改为“&” 如果那个“&”后面没有跟“amp;” 修复:

sed 's/&(?!amp;)/\&amp;/g; s/</\&lt;/g; s/>/\&gt;/g; s/"/\&quot;/g; s/'"'"'/\&#39;/g'
于 2015-03-07T12:51:15.913 回答