aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordakkar <dakkar@thenautilus.net>2009-09-10 15:42:17 +0200
committerdakkar <dakkar@thenautilus.net>2009-09-10 15:42:17 +0200
commitc877ff92a9fb0f23ca0227a9f73b8cb019806069 (patch)
treee57e140018c4082dc4c53764ba41f9f689ccb48f
parentalways return a "title" element for titles (diff)
downloadWebCoso-c877ff92a9fb0f23ca0227a9f73b8cb019806069.tar.gz
WebCoso-c877ff92a9fb0f23ca0227a9f73b8cb019806069.tar.bz2
WebCoso-c877ff92a9fb0f23ca0227a9f73b8cb019806069.zip
add "encode-uri" EXSLT function
-rw-r--r--lib/XML/LibXSLT/EXSLT.pm16
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;