使用 CGI::Fast to_json 在浏览器中出现意外输出

问题描述 投票:0回答:1

我有一台装有 openSUSE Leap 15.3 的服务器。

在此服务器上,我使用 apache2-mod_fcgi 运行 Apache 2.4.43。

我有以下程序:

test.fcgi

#!/usr/bin/perl
use JSON;
use CGI::Fast;

while (CGI::Fast->new) {
   print "Content-type: text/html; charset=utf-8\n\n";

   $array{strng} = "öäüöä";

   $strng_json1 = to_json (\%array);
   $strng_json2 = "{\"strng\":\"öäüöä\"}";

   if ($strng_json1 eq $strng_json2) {
      print "\$strng_json1 and \$strng_json2 are equal <br><br>";
   }

   print "\$strng_json1: $strng_json1 <br>";
   print "\$strng_json2: $strng_json2 <br>";
}

如果我在浏览器中启动该程序,我会看到输出:

$strng_json1 and $strng_json2 are equal

$strng_json1: {"strng":"öäüöä"}
$strng_json2: {"strng":"öäüöä"} 

我不明白的是,为什么如果

$strng_json1
$strng_json2
相等,在浏览器中我会看到两个不同的字符串。

json perl fastcgi
1个回答
0
投票

您正在处理 CGI::Fast 中的错误(技术上是 FCGI::Request)以及您自己的错误。通过添加

use utf8;
并对输出进行编码来修复您的问题。 (通常情况下,我建议使用
use open ":std", ":encoding(UTF-8)";
来处理后者,但这在这里不起作用。)那么 CGI::Fast/FCGI::Request 中的错误不太可能打扰您。

© www.soinside.com 2019 - 2024. All rights reserved.