使用json_encode减少问题.为什么以及如何解决它?

Me *_*hdi 15 php json codeigniter date

为什么("2011/7/11")json_encode显示器输出这个日期("2011\/7\/11")

我怎样才能转换"2011\/7\/11""2011/7/11"

$data_go = '2011/7/11';
$ddmmyyy='([1-9][\d]{3})[- \/.]([0-1][\d])[- \/.]([0-3][\d])';
            if(preg_match("/$ddmmyyy$/", $data_go)) {
            $year = substr($data_go,0,4);
            $month = substr($data_go,5,2);
            $day = substr($data_go,8,2);
            $j2g = $this->convert_date->JalaliToGregorian($year, $month, $day);
             $ok = $j2g[0]."/".$j2g[1]."/".$j2g[2];
            }else {
              return FALSE;
            }
echo json_encode($ok); // output "2011\/7\/11"
Run Code Online (Sandbox Code Playgroud)

Art*_*cto 37

在PHP 5.4中,您可以使用JSON_UNESCAPED_SLASHES:

echo json_encode("2011/7/11", JSON_UNESCAPED_SLASHES);
Run Code Online (Sandbox Code Playgroud)

否则,你必须做一些简单的后处理

str_replace('\\/', '/', json_encode("2011/7/11"));
Run Code Online (Sandbox Code Playgroud)

请注意,这\//在JSON中表示的有效方式.

  • 它本质上是PHP中的一个错误,json_encode需要此标志来输出典型的json.json规范不需要转义斜杠.https://bugs.php.net/bug.php?id=49366 (3认同)
  • PHP使用导致magic_quotes_gpc过去出现的历史逻辑。即,它尝试进行半确定编码,以避免由于缺少编码而引起的最简单的攻击。在这种情况下,原因是允许Web开发人员对“ << script>”。json_encode($ whatever)。” </ script>”`进行编码,其中$ whatever可能在某处包含文字“ </ </ script>”。可选的斜杠编码会将`“ </ script>”`转换为`“ <\ / script>”`,这避免了将其余字符串解释为原始HTML的问题。 (3认同)