diff options
Diffstat (limited to 'lib/XML/LibXSLT')
-rw-r--r-- | lib/XML/LibXSLT/EXSLT.pm | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/lib/XML/LibXSLT/EXSLT.pm b/lib/XML/LibXSLT/EXSLT.pm index fce93e9..9bf375f 100644 --- a/lib/XML/LibXSLT/EXSLT.pm +++ b/lib/XML/LibXSLT/EXSLT.pm @@ -2,11 +2,14 @@ package XML::LibXSLT::EXSLT; use strict; use warnings; use XML::LibXML; +use URI::Escape; +use Encode; my $STRING_NS='http://exslt.org/strings'; my @funcs=( [$STRING_NS,'split',\&estr_split], + [$STRING_NS,'encode-uri',\&estr_uri_escape], ); sub apply_to { @@ -41,4 +44,17 @@ sub estr_split { return $doc; } +sub estr_uri_escape { + my ($string,$unsafe_mode,$encoding)=@_; + + $encoding||='utf8'; + + my $unsafe=q{^a-zA-Z0-9\-_.!~*'()}; #'; + if (!$unsafe_mode) { + $unsafe.=q{;/?:@&=+$,\[\]}; + } + + return uri_escape(encode($encoding,$string),$unsafe); +} + 1; |