用于XML编码的perl one-liner

时间:2013-08-20 17:29:53

标签: xml perl bash

就像我可以使用echo 'one two' | perl -MURI::Escape -wlne 'print uri_escape $_'来对字符串进行url编码一样,我怎样才能做类似的事情来将字符串编码为有效的XML? (我将始终在有效的URL上使用它,但我需要将它们包含在XML标记中)。

1 个答案:

答案 0 :(得分:3)

以下内容适用于XML文本:

 perl -MHTML::Entities -CS -pe'$_ = encode_entities($_, "&<")'

以下内容适用于"分隔的XML属性:

 perl -MHTML::Entities -CS -pe'$_ = encode_entities($_, q{&<"})'

以下内容适用于'分隔的XML属性:

 perl -MHTML::Entities -CS -pe'$_ = encode_entities($_, "&<'\''")'

所有在一起:

 perl -MHTML::Entities -CS -pe'$_ = encode_entities($_, q{&<>"'\''})'

我包含了>,尽管大多数人都没有这样做。

此程序假定将插入文本的文档的字符集为Unicode,这意味着它假定文档的编码为UTF-8,UTF-16le,UTF-16be,UTF-32le或UTF-32be。如果文档使用不同的字符集,则字符集中不存在的Unicode字符也需要转义。

该程序假定输入和输出为UTF-8。 (您的URI编码程序假定其输入为UTF-8。)


但是,由于您正在讨论有效的网址,因此以下内容适用于XML文本以及"分隔的属性:

 perl -pe's/&/&amp;/g'

如果该值可以用作'分隔的属性值,则需要

 perl -pe"s/&/&amp;/g s/'/&apos;/g"