在Bash中转义HTML的捷径?
该框没有Ruby/Python/Perl等 只有在Bash中转义HTML的捷径?,bash,html-entities,Bash,Html Entities,该框没有Ruby/Python/Perl等 只有bash、sed和awk 一种方法是用map替换char,但它会变得单调乏味 也许有些我不知道的内置功能?转义HTML实际上只需要替换三个字符:,和&。对于额外的要点,您还可以替换“和”。因此,它不是一个长的sed脚本: sed 's/&/\&/g; s/</\</g; s/>/\>/g; s/"/\"/g; s/'"'"'/\'/g' sed's/
bash
、sed
和awk
一种方法是用map替换char,但它会变得单调乏味
也许有些我不知道的内置功能?转义HTML实际上只需要替换三个字符:
,和&
。对于额外的要点,您还可以替换“
和”
。因此,它不是一个长的sed
脚本:
sed 's/&/\&/g; s/</\</g; s/>/\>/g; s/"/\"/g; s/'"'"'/\'/g'
sed's/&/\&;/g;s/\/g;s/“/\”/g;s/'''''/\&&39;/g'
以前的sed替换会损坏有效输出,如
<
进入
在前面添加一个负数loook,使“&”仅更改为“&;“如果那”&“后面还没有”amp;“修正如下:
sed 's/&(?!amp;)/\&/g; s/</\</g; s/>/\>/g; s/"/\"/g; s/'"'"'/\'/g'
sed's/&(?!amp;)/\&;/g;s/\/g;s/“/\”/g;s/''''''''/\&&39;/g'
您可以使用重新编码
实用程序:
echo 'He said: "Not sure that - 2<1"' | recode ascii..html
纯bash,无外部程序:
function htmlEscape () {
local s
s=${1//&/&}
s=${s//</<}
s=${s//>/>}
s=${s//'"'/"}
printf -- %s "$s"
}
函数htmlEscape(){
当地居民
s=${1/&/&;}
s=${s//}
s=${s/'''/''}
printf--%s“$s”
}
只需简单的字符串替换。或使用xmlstar:
$echo'| xml esc
abc&def
大错特错。当我用HTML编码字符串&;
时,这是因为我想让某些web浏览器将其呈现为&;
。这就是为什么必须将其转换为&;
。这样,HTML编码和HTML解码是平衡的。您不会因为输入看起来已经存在而抑制HTML编码HTML编码。HTML编码不是幂等的。如果不理解,最终会导致XSS漏洞。@Ruud是对的;正确的方法是首先逃过符号,就像ruakh的回答中那样。我完全同意@Ruud所说的,除了他应该强调不理解会导致XSS漏洞Probab如果没有Python/Ruby/Perl,则无法使用。在30个左右包含ASCII的文本文件上测试,它甚至可以处理空字符\0
。用于沙箱文本文件内容,用于沙箱HTML中沙箱iframe
属性,并允许通过父框架层叠背景样式。+1用于优雅和高效。你应该在这里发布你的答案:他们建议在哪里安装recode
,perl
,php
,xmlsarlet
和w3m
(一种大声叫喊的网络浏览器)。最后一个答案建议使用Python3,尽管它是默认安装的(至少在Ubuntu中)太过分了。@wineunuchs2unix:谢谢你的客气话!这个问题的方向正好相反(
到@ruakh不客气:)您的sed搜索和替换不能简单地反转以获得与这些答案相同的结果吗?@wineunuchs2unix:HTML转义给定文本的方法有很多种;例如,
、<;
和&&60;
都是转义的有效方法。我的HTML转义仅限于堆栈交换站点到目前为止,我只注意到&Amp;
,$lt;
和“
。我们的目标是比较我在Ask Ubuntu中发布的驱动器上的所有脚本,看看它们是否在Ask Ubuntu中被本地更改或被其他人修改过。为了好玩,我还从HTML文件中提取upvotes并将其放在本地文件中。这是前几天晚上正在进行的工作:我想尝试一下,但不知道如何安装xml esc。我甚至不知道那是什么。如果您使用的是MacOS,您可以详细说明一下吗?只需brew安装xmlstarlet
。
He said: "Not sure that - 2<1"
function htmlEscape () {
local s
s=${1//&/&}
s=${s//</<}
s=${s//>/>}
s=${s//'"'/"}
printf -- %s "$s"
}
$ echo '<abc&def>'| xml esc
<abc&def>