我需要从我正在进行的xml解析中返回的数据中转义某些字符值。问题是我需要对xml解析中的所有值进行某种检查。例如,如果我有以下内容:
<data>this is sample data"</data>
我需要能够在双引号字符值前面添加一个转义字符,这样如果该值存储到$ x,并且我打印$ x,它将显示:
this is sample data\"
感谢。
答案 0 :(得分:2)
这与XML,解析或其组合无关。你有一个包含
的变量this is sample data"
您想要将该变量更改为包含
this is sample data\"
您可以使用quotemeta
my $s = 'this is sample data"';
my $escaped = quotemeta($s);
您可以使用替换运算符转义某些字符(例如\
和"
)。
my $s = 'this is sample data"';
( my $escaped = $s ) =~ s/(?=[\\"])/\\/g;
Perl 5.14 +:
my $s = 'this is sample data"';
my $escaped = $s =~ s/(?=[\\"])/\\/rg;
答案 1 :(得分:2)
来自XML::Simple
perldoc:
默认情况下,“XMLout()”会翻译字符'&lt;','&gt;','&amp;'和 '''分别来自
<
,>
,&
和"
。
如果您希望在从hashref转换为XML字符串时(即在将XML写回文件之前)将这些字符正确转义为有效XML,那么您无需更改任何内容。
如果要在转换为XML字符串时以其他方式转义这些字符,则应扩展XML::Simple
并覆盖escape_value()
方法(请注意,反斜杠不是正确的方法XML中的那些字符。)
如果由于某些其他原因想要转义XMLin()
生成的hashref中的标量值的内容,那么其他答案就可以完成。
答案 2 :(得分:0)
XML::Simple
不会为您转义字符,因为XML转义是在实体中完成的 - 例如双引号表示为"
。
Perl内置函数quotemeta
可能就是您想要的。它逃脱了不是字母数字或下划线的一切。
print quotemeta q/this is sample data"/;
<强>输出强>
this\ is\ sample\ data\"