The attached patches extends XML::Generator to make it escape all
characters outside the normal ASCII range if escape => "high-bit" is set.
Kind regards,
Dave Lambley
Subject: | escape_everything.diff |
commit 8e9a9b062b6ae9e2fc4a17b58dee5871af53360e
Author: Dave Lambley <davel@state51.co.uk>
Date: Mon May 21 12:38:13 2012 +0000
Escape anything outside ascii.
diff --git a/Generator.pm b/Generator.pm
index 4aa9264..fa973aa 100644
--- a/Generator.pm
+++ b/Generator.pm
@@ -1399,7 +1399,7 @@ sub escape {
}
}
if ($f & ESCAPE_HIGH_BIT) {
- $_[0] =~ s/([\200-\377])/'&#'.ord($1).';'/ge;
+ $_[0] =~ s/([^\x00-\x7f])/'&#'.ord($1).';'/ge;
}
if ($f & ESCAPE_FILTER_INVALID_CHARS) {
filter($_[0]);
diff --git a/t/Generator.t b/t/Generator.t
index e2dc48f..c9299e3 100644
--- a/t/Generator.t
+++ b/t/Generator.t
@@ -264,6 +264,9 @@ $x = XML::Generator->new(':strict', escape => 'high-bit');
$xml = $x->foo("\\<\242", $x->xmlpi('g'));
ok($xml, '<foo><¢<?g?></foo>');
+$xml = $x->foo("\\<\x{2603}", $x->xmlpi('g'));
+ok($xml, '<foo><☃xxx;<?g?></foo>');
+
{ my $w; local $SIG{__WARN__} = sub { $w .= $_[0] };
$x = XML::Generator->new(':import');
ok($w =~ /Useless use of/, 1); $w = '';