gpt4 book ai didi

json - PHP7、JSON 和 Zend(解码失败 : syntax error)

转载 作者:行者123 更新时间:2023-12-01 05:32:38 24 4
gpt4 key购买 nike

我最近升级到 PHP 7.0.4 和 nginx 1.8.1,我的应用程序使用 Zend Framework (Magento 1.9.2.1)。自那次升级以来,我们的客户在提交订单时有时会收到“解码失败:语法错误”

public static function decode($encodedValue, $objectDecodeType = Zend_Json::TYPE_ARRAY)
{
$encodedValue = (string) $encodedValue;
if (function_exists('json_decode') && self::$useBuiltinEncoderDecoder !== true) {
$decode = json_decode($encodedValue, $objectDecodeType);

// php < 5.3
if (!function_exists('json_last_error')) {
if (strtolower($encodedValue) === 'null') {
return null;
} elseif ($decode === null) {
#require_once 'Zend/Json/Exception.php';
throw new Zend_Json_Exception('Decoding failed');
}
// php >= 5.3
} elseif (($jsonLastErr = json_last_error()) != JSON_ERROR_NONE) {
#require_once 'Zend/Json/Exception.php';
switch ($jsonLastErr) {
case JSON_ERROR_DEPTH:
throw new Zend_Json_Exception('Decoding failed: Maximum stack depth exceeded');
case JSON_ERROR_CTRL_CHAR:
throw new Zend_Json_Exception('Decoding failed: Unexpected control character found');
case JSON_ERROR_SYNTAX:
throw new Zend_Json_Exception('Decoding failed: Syntax error');
default:
throw new Zend_Json_Exception('Decoding failed');
}
}

return $decode;
}

我读到了一个错误,即 PHP7 和 JSON 解码在编码空字符串时表现不同。有谁知道这个错误是否与 PHP7 或我的应用程序/服务器有关?

谢谢

最佳答案

这是 json_decode 的绝对正常行为。

如果给定的字符串不是有效的 JSON 字符串,它会抛出这个异常。

正如您已经提到的,空字符串也不是有效的 JSON 字符串。

json_decode('Hello') // invalid
json_decode("Hello") //invalid

但是:

json_decode("'Hello'") // valid JSON string

自 PHP7 起,空字符串将引发异常!

"Calling json_decode with 1st argument equal to empty PHP string or value that after casting to string is empty string (NULL, FALSE) results in JSON syntax error."

所以...回答您的问题:在我看来,您的应用程序有您需要解决的问题,如果降级您的 PHP 版本不是一个选项。

Magenta 函数需要在将 JSON 字符串传递给 json_decode 函数之前检查其是否有效。

如果变量不是字符串(is_string)或为空,请尝试将变量设置为{}

如果这不是问题,则可能是您的字符串未按应有的方式编码。很多时候,传递给 json_decode 的字符串编码也会导致该异常。

关于json - PHP7、JSON 和 Zend(解码失败 : syntax error),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36362856/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com