X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fp5-CGI-Ex;a=blobdiff_plain;f=lib%2FCGI%2FEx%2FJSONDump.pm;h=d566b2f860927df14763f96cc64359803b6daa29;hp=03ddce970d94e995e67ece8e7d3eb15fa5a66877;hb=8abbacc82b52f460bef67c1923ae98873a95e123;hpb=d0287461de3f9b5c49ce02b22957022bdc5e87d8 diff --git a/lib/CGI/Ex/JSONDump.pm b/lib/CGI/Ex/JSONDump.pm index 03ddce9..d566b2f 100644 --- a/lib/CGI/Ex/JSONDump.pm +++ b/lib/CGI/Ex/JSONDump.pm @@ -17,7 +17,7 @@ use strict; use base qw(Exporter); BEGIN { - $VERSION = '2.07'; + $VERSION = '2.08'; @EXPORT = qw(JSONDump); @EXPORT_OK = @EXPORT; @@ -103,7 +103,7 @@ sub js_escape { return 'null' if ! defined $str; ### allow things that look like numbers to show up as numbers (and those that aren't quite to not) - return $str if $str =~ /^ -? (?: [0-9]{0,13} \. \d* [1-9] | [1-9][0-9]{0,12}) $/x; + return $str if $str =~ /^ -? (?: [1-9][0-9]{0,12} | 0) (?: \. \d* [1-9])? $/x; my $quote = $self->{'single_quote'} ? "'" : '"'; @@ -117,7 +117,8 @@ sub js_escape { utf8::decode($str) if $self->{'utf8'} && &utf8::decode; ### escape and tags in the text - $str =~ s{() )}{$1$quote+$quote}gx; + $str =~ s{() )}{$1$quote+$quote}gx + if ! $self->{'no_tag_splitting'}; ### add nice newlines (unless pretty is off) if ($self->{'str_nl'} && length($str) > 80) { @@ -359,6 +360,31 @@ greater than 80 characters. Default is "\n" (if pretty is true). If the string is less than 80 characters, or if str_nl is set to "", then the escaped string will be contained on a single line. Setting pretty to 0 effectively sets str_nl equal to "". +=item no_tag_splitting + +Default off. If JSON is embedded in an HTML document and the JSON contains C<< >>, +C<< >>, C<< >>, C<< >> tags, they are +split apart with a quote, a +, and a quote. This allows the embedded tags to not affect +the currently playing JavaScript. + +However, if the JSON that is output is intended for deserialization by another non-javascript-engine +JSON parser, this splitting behavior may cause errors when the JSON is imported. To avoid the splitting +behavior in these cases you can use the no_tag_splitting flag to turn off the behavior. + + JSONDump(""); + + Would print + + "" + + With the flag + + JSONDump("", {no_tag_splitting => 1}); + + Would print + + "" + =back =head1 AUTHORS