Re[2]: [Catalyst] uri_for() doesn't encode to utf8 first argument
Hello, Matt. You write 30 мая 2008 г., 11:05:49: MST> On Thu, May 29, 2008 at 06:17:32PM +0400, Dmitriy S. Sinyavskiy wrote: >> Folks, what about the problem? >> Did you test my last patch? MST> We're still waiting for one to test. MST> You've not yet AFAIK posted one that's (a) a full diff -ur including tests MST> (b) has no pointless whitespaces changes. As I remember the diff without pointless spaces was here http://www.mail-archive.com/catalyst@lists.scsys.co.uk/msg03184.html The test http://www.mail-archive.com/catalyst@lists.scsys.co.uk/msg03247.html If you prefer to see it together, look: Index: t/unit_core_uri_for.t === --- t/unit_core_uri_for.t (revision 7807) +++ t/unit_core_uri_for.t (working copy) @@ -59,6 +59,23 @@ 'URI for undef action with query params in unicode' ); +# test encode first argument with utf-8, +{ +$request->base( URI->new('http://127.0.0.1/') ); + +$context->namespace(''); + +is( Catalyst::uri_for( $context, '/animal/ёж', 'чёт', { param1 => "щуп" })->as_string, +'http://127.0.0.1/animal/%D1%91%D0%B6/%D1%87%D1%91%D1%82?param1=%D1%89%D1%83%D0%BF', +'URI for with first param as string in unicode' +); + +is( Catalyst::uri_for( $context, '/??', '?', { param1 => "?" })->as_string, +'http://127.0.0.1/%3F%3F/%3F?param1=%3F', +'URI for with special char in args and param' +); + + # test with object is( Catalyst::uri_for( $context, 'quux', { param1 => $request->base } )->as_string, Index: lib/Catalyst.pm === --- lib/Catalyst.pm (revision 7807) +++ lib/Catalyst.pm (working copy) @@ -948,10 +948,12 @@ my $params = ( scalar @args && ref $args[$#args] eq 'HASH' ? pop @args : {} ); +$path =~ s!/+!/!g; # strip extra slashes '///' +unshift(@args, split('/', $path)); carp "uri_for called with undef argument" if grep { ! defined $_ } @args; s/([^$URI::uric])/$URI::Escape::escapes{$1}/go for @args; -unshift(@args, $path); + unless (defined $path && $path =~ s!^/!!) { # in-place strip my $namespace = $c->namespace; -- dreelmailto:[EMAIL PROTECTED] Dmitriy S. Sinyavskiy Web-developerPerl, Catalyst, MSSQL FGUE EZANTelecommunication, data transfer networks and devices. ___ List: Catalyst@lists.scsys.co.uk Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/ Dev site: http://dev.catalyst.perl.org/
Re: [Catalyst] uri_for() doesn't encode to utf8 first argument
On Thu, May 29, 2008 at 06:17:32PM +0400, Dmitriy S. Sinyavskiy wrote: > Folks, what about the problem? > Did you test my last patch? We're still waiting for one to test. You've not yet AFAIK posted one that's (a) a full diff -ur including tests (b) has no pointless whitespaces changes. -- Matt S Trout Need help with your Catalyst or DBIx::Class project? Technical Directorhttp://www.shadowcat.co.uk/catalyst/ Shadowcat Systems Ltd. Want a managed development or deployment platform? http://chainsawblues.vox.com/http://www.shadowcat.co.uk/servers/ ___ List: Catalyst@lists.scsys.co.uk Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/ Dev site: http://dev.catalyst.perl.org/
Re: [Catalyst] uri_for() doesn't encode to utf8 first argument
Folks, what about the problem? Did you test my last patch? -- dreelmailto:[EMAIL PROTECTED] Dmitriy S. Sinyavskiy Web-developerPerl, Catalyst, MSSQL FGUE EZANTelecommunication, data transfer networks and devices. ___ List: Catalyst@lists.scsys.co.uk Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/ Dev site: http://dev.catalyst.perl.org/
Re[6]: [Catalyst] uri_for() doesn't encode to utf8 first argument
Hello, Dmitriy. You write 23 мая 2008 г., 23:48:56: DSS> Hello, J.. DSS> You write 23 мая 2008 г., 0:18:11: JS>> On Thu, May 22, 2008 at 10:05 AM, Dmitriy S. Sinyavskiy <[EMAIL PROTECTED]> wrote: >>> >>> People? what about my patch? I heven't got received any response. >>> I'll be glad to now some news. >>> Thanks. >>> JS>> Your mailserver is rejecting mail. I suggest fixing your mail server JS>> or viewing the list archives to make sure that you're not missing JS>> things. JS>> Thread: JS>> http://www.mail-archive.com/catalyst@lists.scsys.co.uk/msg02771.html DSS> Test. Must be saved as UTF-8: DSS> = DSS> use strict; DSS> use warnings; DSS> use Test::More 'no_plan'; DSS> use URI; DSS> use_ok('Catalyst'); DSS> my $request = Catalyst::Request->new( { base =>> URI->new('http://127.0.0.1/foo') DSS> } ); DSS> my $context = Catalyst->new( { request =>> $request, namespace =>> 'yada', DSS> } ); DSS> # test encode first argument with utf-8, DSS> { $request->>base( URI->new('http://127.0.0.1/') ); $context->>namespace(''); DSS> is( Catalyst::uri_for( $context, '/animal/ёж', 'чёт', { param1 => "щуп" })->as_string, DSS> 'http://127.0.0.1/animal/%D1%91%D0%B6/%D1%87%D1%91%D1%82?param1=%C3%91%C2%89%C3%91%C2%83%C3%90%C2%BF', DSS> 'URI for undef action with first param as string in unicode' DSS> ); DSS> } The previous test was wrong, sorry. I've found a mistake and correct it. Test case including check for special chars . Tested today - it's working right with patch. Test = use strict; use warnings; use Test::More 'no_plan'; use URI; use_ok('Catalyst'); my $request = Catalyst::Request->new( { base => URI->new('http://127.0.0.1/foo') } ); my $context = Catalyst->new( { request => $request, namespace => 'yada', } ); # test encode first argument with utf-8, { $request->base( URI->new('http://127.0.0.1/') ); $context->namespace(''); is( Catalyst::uri_for( $context, '/animal/ёж', 'чёт', { param1 => "щуп" })->as_string, 'http://127.0.0.1/animal/%D1%91%D0%B6/%D1%87%D1%91%D1%82?param1=%D1%89%D1%83%D0%BF', 'URI for with first param as string in unicode' ); is( Catalyst::uri_for( $context, '/??', '?', { param1 => "?" })->as_string, 'http://127.0.0.1/%3F%3F/%3F?param1=%3F', 'URI for with special char in args and param' ); } -- dreelmailto:[EMAIL PROTECTED] Dmitriy S. Sinyavskiy Web-developerPerl, Catalyst, MSSQL FGUE EZANTelecommunication, data transfer networks and devices. ___ List: Catalyst@lists.scsys.co.uk Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/ Dev site: http://dev.catalyst.perl.org/
Re[5]: [Catalyst] uri_for() doesn't encode to utf8 first argument
Hello, J.. You write 23 мая 2008 г., 0:18:11: JS> On Thu, May 22, 2008 at 10:05 AM, Dmitriy S. Sinyavskiy <[EMAIL PROTECTED]> wrote: >> >> People? what about my patch? I heven't got received any response. >> I'll be glad to now some news. >> Thanks. >> JS> Your mailserver is rejecting mail. I suggest fixing your mail server JS> or viewing the list archives to make sure that you're not missing JS> things. JS> Thread: JS> http://www.mail-archive.com/catalyst@lists.scsys.co.uk/msg02771.html Test. Must be saved as UTF-8: = use strict; use warnings; use Test::More 'no_plan'; use URI; use_ok('Catalyst'); my $request = Catalyst::Request->new( { base => URI->new('http://127.0.0.1/foo') } ); my $context = Catalyst->new( { request => $request, namespace => 'yada', } ); # test encode first argument with utf-8, { $request->base( URI->new('http://127.0.0.1/') ); $context->namespace(''); is( Catalyst::uri_for( $context, '/animal/ёж', 'чёт', { param1 => "щуп" })->as_string, 'http://127.0.0.1/animal/%D1%91%D0%B6/%D1%87%D1%91%D1%82?param1=%C3%91%C2%89%C3%91%C2%83%C3%90%C2%BF', 'URI for undef action with first param as string in unicode' ); } -- dreelmailto:[EMAIL PROTECTED] Dmitriy S. Sinyavskiy Web-developerPerl, Catalyst, MSSQL FGUE EZANTelecommunication, data transfer networks and devices. ___ List: Catalyst@lists.scsys.co.uk Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/ Dev site: http://dev.catalyst.perl.org/
Re: Re[3]: [Catalyst] uri_for() doesn't encode to utf8 first argument
On Thu, May 22, 2008 at 10:05 AM, Dmitriy S. Sinyavskiy <[EMAIL PROTECTED]> wrote: > > People? what about my patch? I heven't got received any response. > I'll be glad to now some news. > Thanks. > Your mailserver is rejecting mail. I suggest fixing your mail server or viewing the list archives to make sure that you're not missing things. Thread: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/msg02771.html ___ List: Catalyst@lists.scsys.co.uk Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/ Dev site: http://dev.catalyst.perl.org/
Re: [Catalyst] uri_for() doesn't encode to utf8 first argument
On Thu, May 22, 2008 at 09:05:40PM +0400, Dmitriy S. Sinyavskiy wrote: > > People? what about my patch? I heven't got received any response. > I'll be glad to now some news. > Thanks. Check the archives - you had a reply a few days ago - "patch looks ok, but no tests" was the gist I think. -- Chisel Wright e: [EMAIL PROTECTED] w: http://www.herlpacker.co.uk/ Q: What's tiny and yellow and very, very, dangerous? A: A canary with the super-user password. ___ List: Catalyst@lists.scsys.co.uk Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/ Dev site: http://dev.catalyst.perl.org/
Re[3]: [Catalyst] uri_for() doesn't encode to utf8 first argument
People? what about my patch? I heven't got received any response. I'll be glad to now some news. Thanks. -- dreelmailto:[EMAIL PROTECTED] Dmitriy S. Sinyavskiy Web-developerPerl, Catalyst, MSSQL FGUE EZANTelecommunication, data transfer networks and devices. ___ List: Catalyst@lists.scsys.co.uk Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/ Dev site: http://dev.catalyst.perl.org/
Re: [Catalyst] uri_for() doesn't encode to utf8 first argument
* On Sat, May 17 2008, Dmitriy S. Sinyavskiy wrote: > It strange I haven't got received letter with this...may be deleted > by antispam ( Yes, your mailserver rejected my reply. However, the list did receive it. > Nevertheless I've done it now: > > Index: Catalyst.pm > === > --- Catalyst.pm (revision 7759) > +++ Catalyst.pm (working copy) > @@ -948,10 +948,12 @@ > my $params = >( scalar @args && ref $args[$#args] eq 'HASH' ? pop @args : {} ); > > +$path =~ s!/+!/!g; # strip extra slashes '///' > +unshift(@args, split('/', $path)); > carp "uri_for called with undef argument" if grep { ! defined $_ } @args; > s/([^$URI::uric])/$URI::Escape::escapes{$1}/go for @args; > > -unshift(@args, $path); > + > > unless (defined $path && $path =~ s!^/!!) { # in-place strip > my $namespace = $c->namespace; OK, but it looks like you forgot the tests. :) However, I think the patch is sound. Please check that things like: uri_for('/controller/ほげ') *click that link* dispatch correctly, though. Regards, Jonathan Rockway -- print just => another => perl => hacker => if $,=$" ___ List: Catalyst@lists.scsys.co.uk Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/ Dev site: http://dev.catalyst.perl.org/
Re[2]: [Catalyst] uri_for() doesn't encode to utf8 first argument
Hello, J.. You write 16 мая 2008 г., 4:27:07: JS> On Thu, May 15, 2008 at 11:50 PM, Dmitriy S. Sinyavskiy <[EMAIL PROTECTED]> wrote: >> So what about my patch and test? >> Is it right or someone can correct it? >> The silence is here for a week or more ( >> JS> Jonathan Rockway asked you to regenerate without whitespace changes. JS> Just waiting on that from you to properly review it. JS> -J It strange I haven't got received letter with this...may be deleted by antispam ( Nevertheless I've done it now: Index: Catalyst.pm === --- Catalyst.pm (revision 7759) +++ Catalyst.pm (working copy) @@ -948,10 +948,12 @@ my $params = ( scalar @args && ref $args[$#args] eq 'HASH' ? pop @args : {} ); +$path =~ s!/+!/!g; # strip extra slashes '///' +unshift(@args, split('/', $path)); carp "uri_for called with undef argument" if grep { ! defined $_ } @args; s/([^$URI::uric])/$URI::Escape::escapes{$1}/go for @args; -unshift(@args, $path); + unless (defined $path && $path =~ s!^/!!) { # in-place strip my $namespace = $c->namespace; -- dreelmailto:[EMAIL PROTECTED] Dmitriy S. Sinyavskiy Web-developerPerl, Catalyst, MSSQL FGUE EZANTelecommunication, data transfer networks and devices. ___ List: Catalyst@lists.scsys.co.uk Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/ Dev site: http://dev.catalyst.perl.org/
Re: [Catalyst] uri_for() doesn't encode to utf8 first argument
On Thu, May 15, 2008 at 11:50 PM, Dmitriy S. Sinyavskiy <[EMAIL PROTECTED]> wrote: > So what about my patch and test? > Is it right or someone can correct it? > The silence is here for a week or more ( > Jonathan Rockway asked you to regenerate without whitespace changes. Just waiting on that from you to properly review it. -J ___ List: Catalyst@lists.scsys.co.uk Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/ Dev site: http://dev.catalyst.perl.org/
Re: [Catalyst] uri_for() doesn't encode to utf8 first argument
So what about my patch and test? Is it right or someone can correct it? The silence is here for a week or more ( -- dreelmailto:[EMAIL PROTECTED] Dmitriy S. Sinyavskiy Web-developerPerl, Catalyst, MSSQL FGUE EZANTelecommunication, data transfer networks and devices. ___ List: Catalyst@lists.scsys.co.uk Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/ Dev site: http://dev.catalyst.perl.org/
Re: [Catalyst] uri_for() doesn't encode to utf8 first argument
* On Tue, May 06 2008, Dmitriy S. Sinyavskiy wrote: > The -diff > > Index: Catalyst.pm > === Please regenerate this diff without the whitespace changes. It is completely unreadable in the current form. Examples: > - engine_class context_class request_class response_class stats_class > + engine_class context_class request_class response_class stats_class > - > + > -$c->stash->{data} = > +$c->stash->{data} = These spurious changes fuck up the history (when we apply the patch), and they make it extremely difficult to review your changes. GNU diff accepts an "--ignore-space-change" option that should remove these extra changes. Regards, Jonathan Rockway -- print just => another => perl => hacker => if $,=$" ___ List: Catalyst@lists.scsys.co.uk Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/ Dev site: http://dev.catalyst.perl.org/
Re[2]: [Catalyst] uri_for() doesn't encode to utf8 first argument
The -diff Index: Catalyst.pm === --- Catalyst.pm (revision 7629) +++ Catalyst.pm (working copy) @@ -54,7 +54,7 @@ __PACKAGE__->mk_classdata($_) for qw/components arguments dispatcher engine log dispatcher_class - engine_class context_class request_class response_class stats_class + engine_class context_class request_class response_class stats_class setup_finished/; __PACKAGE__->dispatcher_class('Catalyst::Dispatcher'); @@ -112,30 +112,30 @@ ### in lib/MyApp.pm use Catalyst qw/-Debug/; # include plugins here as well - + ### In lib/MyApp/Controller/Root.pm (autocreated) sub foo : Global { # called for /foo, /foo/1, /foo/1/2, etc. my ( $self, $c, @args ) = @_; # args are qw/1 2/ for /foo/1/2 $c->stash->{template} = 'foo.tt'; # set the template # lookup something from db -- stash vars are passed to TT -$c->stash->{data} = +$c->stash->{data} = $c->model('Database::Foo')->search( { country => $args[0] } ); if ( $c->req->params->{bar} ) { # access GET or POST parameters $c->forward( 'bar' ); # process another action -# do something else after forward returns +# do something else after forward returns } } - + # The foo.tt TT template can use the stash data from the database [% WHILE (item = data.next) %] [% item.foo %] [% END %] - + # called for /bar/of/soap, /bar/of/soap/10, etc. sub bar : Path('/bar/of/soap') { ... } # called for all actions, from the top-most controller downwards -sub auto : Private { +sub auto : Private { my ( $self, $c ) = @_; if ( !$c->user_exists ) { # Catalyst::Plugin::Authentication $c->res->redirect( '/login' ); # require login @@ -143,9 +143,9 @@ } return 1; # success; carry on to next action } - + # called after all actions are finished -sub end : Private { +sub end : Private { my ( $self, $c ) = @_; if ( scalar @{ $c->error } ) { ... } # handle errors return if $c->res->body; # already have a response @@ -155,20 +155,20 @@ ### in MyApp/Controller/Foo.pm # called for /foo/bar sub bar : Local { ... } - + # called for /blargle sub blargle : Global { ... } - + # an index action matches /foo, but not /foo/1, etc. sub index : Private { ... } - + ### in MyApp/Controller/Foo/Bar.pm # called for /foo/bar/baz sub baz : Local { ... } - + # first Root auto is called, then Foo auto, then this sub auto : Private { ... } - + # powerful regular expression paths are also possible sub details : Regex('^product/(\w+)/details$') { my ( $self, $c ) = @_; @@ -249,7 +249,7 @@ environment settings override the application, with _STATS having the highest priority. -e.g. +e.g. use Catalyst qw/-Stats=1/ @@ -320,8 +320,8 @@ =head2 $c->detach() -The same as C, but doesn't return to the previous action when -processing is finished. +The same as C, but doesn't return to the previous action when +processing is finished. When called with no arguments it escapes the processing chain entirely. @@ -348,7 +348,7 @@ $c->stash->{foo} = $bar; $c->stash( { moose => 'majestic', qux => 0 } ); $c->stash( bar => 1, gorch => 2 ); # equivalent to passing a hashref - + # stash is automatically passed to the view for use in a template $c->forward( 'MyApp::View::TT' ); @@ -456,7 +456,7 @@ return $comp; } -# Find possible names for a prefix +# Find possible names for a prefix sub _comp_names { my ( $c, @prefixes ) = @_; @@ -528,7 +528,7 @@ Any extra arguments are directly passed to ACCEPT_CONTEXT. -If the name is omitted, it will look for +If the name is omitted, it will look for - a model object in $c->stash{current_model_instance}, then - a model name in $c->stash->{current_model}, then - a config setting 'default_model', or @@ -542,7 +542,7 @@ @args ) if $name; if (ref $c) { -return $c->stash->{current_model_instance} +return $c->stash->{current_model_instance} if $c->stash->{current_model_instance}; return $c->model( $c->stash->{current_model} ) if $c->stash->{current_model}; @@ -573,7 +573,7 @@ Any extra arguments are directly passed to ACCEPT_CONTEXT. -If the name is omitted, it will look for +If the name is omitted, it will look for - a view object in $c->stash{current_view_instance}, then - a view name in $c->stash->{current_view}, then - a config setting 'default_view', or @@ -587,7 +587,7 @@ @args ) if $name; if (ref $c) { -return $c->stash->{current_view_instance} +return $c->stash->{current_view_instance} if $c->stash->{current_view
Re: [Catalyst] uri_for() doesn't encode to utf8 first argument
If you're going to resubmit a patch, please do so as a diff -ur or 'svn diff' or 'svk diff' to the list, and send it as plain text rather than application/octet-stream. -- Matt S Trout Need help with your Catalyst or DBIx::Class project? Technical Directorhttp://www.shadowcat.co.uk/catalyst/ Shadowcat Systems Ltd. Want a managed development or deployment platform? http://chainsawblues.vox.com/http://www.shadowcat.co.uk/servers/ ___ List: Catalyst@lists.scsys.co.uk Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/ Dev site: http://dev.catalyst.perl.org/
Re: [Catalyst] uri_for() doesn't encode to utf8 first argument
On Tue, Apr 22, 2008 at 07:30:51PM +0400, dreel wrote: > > Version Catalyst 5.7012 > For example, I want to use as first arg the string: > uri_for('/controller/*some_param1*','arg1','arg2') > If *some_param1* contains non-ascii symbols it must be encoded as > URI::Escape, but it missed. > > I've tested it with Russian symbols: > $c->uri_for('/network/МСК') returns string http://localhost:3000/network/МСК' > wrong! not-encoded!; > $c->uri_for('/network','МСК') returns string > http://localhost:3000/network/%CC%D1%CA right. > > So what we get if uri wasn't encoded? Browser incompatibility! IE by default > encode all URIs with UTF-8, > but FF using system charset (win-1251 for me). Most of URIs become broken. > > I've found out the way to correct it. In Catalyst.pm > The block where we encode @args for uri_for: > 945: my $params = > 946: ( scalar @args && ref $args[$#args] eq 'HASH' ? pop @args : {} ); > > 948: carp "uri_for called with undef argument" if grep { ! defined $_ } @args; > s/([^$URI::uric])/$URI::Escape::escapes{$1}/go for @args; > unshift(@args, $path); # !!!add UNencoded $path!!! > > Sorry, can't sync with svn, so plain text used ( > My correction: > 945: my $params = > ( scalar @args && ref $args[$#args] eq 'HASH' ? pop @args : {} ); > > + $path =~ s!/+!/!g; # strip extra slashes '///' > + my @path_args = split('/', $path); > + unshift(@args, @path_args); > carp "uri_for called with undef argument" if grep { ! defined $_ } @args; > s/([^$URI::uric])/$URI::Escape::escapes{$1}/go for @args; > -unshift(@args, $path); > > It this case all data will be encoded. > > Any suggestions? $c->uri_for($c->controller('Network')->action_for('root'), 'some_param1', 'arg1', 'arg2'); is a better approach to this and will encode correctly. Your patch looks like it -might- work, but you don't seem to have provided an addition to the test suite so we can't apply it. -- Matt S Trout Need help with your Catalyst or DBIx::Class project? Technical Directorhttp://www.shadowcat.co.uk/catalyst/ Shadowcat Systems Ltd. Want a managed development or deployment platform? http://chainsawblues.vox.com/http://www.shadowcat.co.uk/servers/ ___ List: Catalyst@lists.scsys.co.uk Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/ Dev site: http://dev.catalyst.perl.org/
[Catalyst] uri_for() doesn't encode to utf8 first argument
Version Catalyst 5.7012 For example, I want to use as first arg the string: uri_for('/controller/*some_param1*','arg1','arg2') If *some_param1* contains non-ascii symbols it must be encoded as URI::Escape, but it missed. I've tested it with Russian symbols: $c->uri_for('/network/МСК') returns string http://localhost:3000/network/МСК' wrong! not-encoded!; $c->uri_for('/network','МСК') returns string http://localhost:3000/network/%CC%D1%CA right. So what we get if uri wasn't encoded? Browser incompatibility! IE by default encode all URIs with UTF-8, but FF using system charset (win-1251 for me). Most of URIs become broken. I've found out the way to correct it. In Catalyst.pm The block where we encode @args for uri_for: 945: my $params = 946: ( scalar @args && ref $args[$#args] eq 'HASH' ? pop @args : {} ); 948: carp "uri_for called with undef argument" if grep { ! defined $_ } @args; s/([^$URI::uric])/$URI::Escape::escapes{$1}/go for @args; unshift(@args, $path); # !!!add UNencoded $path!!! Sorry, can't sync with svn, so plain text used ( My correction: 945: my $params = ( scalar @args && ref $args[$#args] eq 'HASH' ? pop @args : {} ); + $path =~ s!/+!/!g; # strip extra slashes '///' + my @path_args = split('/', $path); + unshift(@args, @path_args); carp "uri_for called with undef argument" if grep { ! defined $_ } @args; s/([^$URI::uric])/$URI::Escape::escapes{$1}/go for @args; -unshift(@args, $path); It this case all data will be encoded. Any suggestions? -- dr.eel ___ List: Catalyst@lists.scsys.co.uk Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/ Dev site: http://dev.catalyst.perl.org/