diff --git a/FHEM/01_FHEMWEB.pm b/FHEM/01_FHEMWEB.pm index 8efd000b8..d9112a02a 100755 --- a/FHEM/01_FHEMWEB.pm +++ b/FHEM/01_FHEMWEB.pm @@ -2518,14 +2518,15 @@ 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/([\\"\t\r\n])/$jsTab{ord($1)}/ge; push @a,$x; } @_; + map { my $x = $_; + $x =~ s/([^\x20-\x7e]|[\x22\x5c])/sprintf '\u%04x', ord($1)/ge; + push @a,$x; } @_; return '["'.join('","', @a).'"]'; } else { return join('<<', @_); diff --git a/FHEM/98_JsonList.pm b/FHEM/98_JsonList.pm index 8d0e67014..82c67bc20 100644 --- a/FHEM/98_JsonList.pm +++ b/FHEM/98_JsonList.pm @@ -55,17 +55,7 @@ JsonEscape($) { my $a = shift; return "null" if(!$a); - my %esc = ( - "\n" => '\n', - "\r" => '\r', - "\t" => '\t', - "\f" => '\f', - "\b" => '\b', - "\"" => '\"', - "\\" => '\\\\', - "\'" => '\\\'', - ); - $a =~ s/([\x22\x5c\n\r\t\f\b])/$esc{$1}/eg; + $a=~ s/([^\x20-\x7e]|[\x22\x5c])/sprintf '\u%04x', ord($1)/ge; return $a; } diff --git a/FHEM/98_JsonList2.pm b/FHEM/98_JsonList2.pm index 30ca08904..ded7a0654 100644 --- a/FHEM/98_JsonList2.pm +++ b/FHEM/98_JsonList2.pm @@ -25,17 +25,7 @@ JsonList2_Escape($) { my $a = shift; return "null" if(!defined($a)); - my %esc = ( - "\n" => '\n', - "\r" => '\r', - "\t" => '\t', - "\f" => '\f', - "\b" => '\b', - "\"" => '\"', - "\\" => '\\\\', - "\'" => '\\\'', - ); - $a =~ s/([\x22\x5c\n\r\t\f\b])/$esc{$1}/eg; + $a=~ s/([^\x20-\x7e]|[\x22\x5c])/sprintf '\u%04x', ord($1)/ge; my $b = "x$a"; $a = "" if(!utf8::decode($b)); # Forum #55318 return $a;