就像我可以使用echo 'one two' | perl -MURI::Escape -wlne 'print uri_escape $_'
来对字符串进行url编码一样,我怎样才能做类似的事情来将字符串编码为有效的XML? (我将始终在有效的URL上使用它,但我需要将它们包含在XML标记中)。
答案 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/&/&/g'
如果该值可以用作'
分隔的属性值,则需要
perl -pe"s/&/&/g s/'/'/g"