From cd75e1064cbba5328fff38f0504aba05c4424265 Mon Sep 17 00:00:00 2001 From: rudolfkoenig Date: Wed, 5 Oct 2016 06:54:44 +0000 Subject: [PATCH] 01_FHEMWEB.pm, Jsonlist*.pm: reverse unicode patch (Forum #57377) git-svn-id: https://svn.fhem.de/fhem/trunk@12273 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/01_FHEMWEB.pm | 5 ++--- fhem/FHEM/98_JsonList.pm | 12 +++++++++++- fhem/FHEM/98_JsonList2.pm | 12 +++++++++++- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/fhem/FHEM/01_FHEMWEB.pm b/fhem/FHEM/01_FHEMWEB.pm index d9112a02a..8efd000b8 100755 --- a/fhem/FHEM/01_FHEMWEB.pm +++ b/fhem/FHEM/01_FHEMWEB.pm @@ -2518,15 +2518,14 @@ FW_makeEdit($$$) } +my %jsTab = ( 92=>'\\\\', 34=>'\\"', 9=>'\\t', 13=>'\\r', 10=>'\\n' ); sub FW_longpollInfo($@) { my $fmt = shift; if($fmt && $fmt eq "JSON") { my @a; - map { my $x = $_; - $x =~ s/([^\x20-\x7e]|[\x22\x5c])/sprintf '\u%04x', ord($1)/ge; - push @a,$x; } @_; + map { my $x=$_; $x=~s/([\\"\t\r\n])/$jsTab{ord($1)}/ge; push @a,$x; } @_; return '["'.join('","', @a).'"]'; } else { return join('<<', @_); diff --git a/fhem/FHEM/98_JsonList.pm b/fhem/FHEM/98_JsonList.pm index 82c67bc20..e8cc5a9a6 100644 --- a/fhem/FHEM/98_JsonList.pm +++ b/fhem/FHEM/98_JsonList.pm @@ -55,7 +55,17 @@ JsonEscape($) { my $a = shift; return "null" if(!$a); - $a=~ s/([^\x20-\x7e]|[\x22\x5c])/sprintf '\u%04x', ord($1)/ge; + my %esc = ( + "\n" => '\n', + "\r" => '\r', + "\t" => '\t', + "\f" => '\f', + "\b" => '\b', + "\"" => '\"', + "\\" => '\\\\', + "\'" => '\\\'', + ); + $a =~ s/([\x22\x5c\n\r\t\f\b])/$esc{$1}/eg; return $a; } diff --git a/fhem/FHEM/98_JsonList2.pm b/fhem/FHEM/98_JsonList2.pm index ded7a0654..4ce0913c9 100644 --- a/fhem/FHEM/98_JsonList2.pm +++ b/fhem/FHEM/98_JsonList2.pm @@ -25,7 +25,17 @@ JsonList2_Escape($) { my $a = shift; return "null" if(!defined($a)); - $a=~ s/([^\x20-\x7e]|[\x22\x5c])/sprintf '\u%04x', ord($1)/ge; + my %esc = ( + "\n" => '\n', + "\r" => '\r', + "\t" => '\t', + "\f" => '\f', + "\b" => '\b', + "\"" => '\"', + "\\" => '\\\\', + "\'" => '\\\'', + ); + $a =~ s/([\x22\x5c\n\r\t\f\b])/$esc{$1}/eg; my $b = "x$a"; $a = "" if(!utf8::decode($b)); # Forum #55318 return $a;