use HTML::Entities;
use HTTP::Body;
use HTTP::Headers;
-use URI::Escape ();
use URI::QueryParam;
use Scalar::Util ();
# Amount of data to read from input on each pass
our $CHUNKSIZE = 64 * 1024;
-# See if we can use libapreq2 for URI unescaping
-use constant HAS_APR => eval {
- require APR::Request;
-};
-
=head1 NAME
Catalyst::Engine - The Catalyst Engine
my ( $self, $c, $query_string ) = @_;
# Check for keywords (no = signs)
+ # (yes, index() is faster than a regex :))
if ( index( $query_string, '=' ) < 0 ) {
- $c->request->keywords( $self->unescape_uri($query_string) );
+ $c->request->query_keywords( $self->unescape_uri($query_string) );
return;
}
=head2 $self->unescape_uri($uri)
-Unescapes a given URI using the most efficient method available. Engines
-can subclass to provide faster implementations.
+Unescapes a given URI using the most efficient method available. Engines such
+as Apache may implement this using Apache's C-based modules, for example.
=cut
sub unescape_uri {
- my $self = shift;
-
- if ( HAS_APR ) {
- # This function is ~12x faster than URI::Escape
- return APR::Request::decode(@_);
- }
+ my ( $self, $str ) = @_;
- my $e = URI::Escape::uri_unescape(@_);
- $e =~ s/\+/ /g;
+ $str =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;
+ $str =~ s/\+/ /g;
- return $e;
+ return $str;
}
=head2 $self->finalize_output