本文概述
警告” json_encode()期望参数2长, 给定字符串”之所以发生, 通常是因为你提供的不是常量的数目, 而是字符串作为json_encode的第二个参数。发生这种情况通常是因为你将不存在的常量用作第二个参数, 例如在PHP 5.3中使用JSON_PRETTY_PRINT:
<?php
echo json_encode(array(), JSON_PRETTY_PRINT);
PHP 5.3中的此操作将引起警告, 因为该常量将解释为文字字符串, 因为此常量是自PHP 5.4开始引入的。对于许多提到的PHP版本中没有的常量, 也会发生同样的情况。在本文中, 我们将向你展示两种防止此警告出现的方法。
A.使用常数整数值
当你在json_encode函数中作为第二个参数提供的常量不存在时, 将发生上述警告, 因此PHP将常量名称转换为文字字符串:
<?php
// In PHP 5.3 is like providing:
echo json_encode(array(), "JSON_PRETTY_PRINT");
// which is invalid
因此, 你将需要知道要在PHP 5.3中使用的常量的整数值:
JSON_HEX_TAG => 1
JSON_HEX_AMP => 2
JSON_HEX_APOS => 4
JSON_HEX_QUOT => 8
JSON_FORCE_OBJECT => 16
JSON_NUMERIC_CHECK => 32
JSON_UNESCAPED_SLASHES => 64
JSON_PRETTY_PRINT => 128
JSON_UNESCAPED_UNICODE => 256
JSON_ERROR_DEPTH => 1
JSON_ERROR_STATE_MISMATCH => 2
JSON_ERROR_CTRL_CHAR => 3
JSON_ERROR_SYNTAX => 4
JSON_ERROR_UTF8 => 5
JSON_OBJECT_AS_ARRAY => 1
JSON_BIGINT_AS_STRING => 2
然后, 只需将其作为json_encode方法中的第二个参数提供即可, 例如JSON_PRETTY_PRINT:
<?php
echo json_encode(array(), 128);
上一个代码段将不再显示警告, 以此类推, 以及你要使用的其他常量。
B.自己定义JSON常量
如果你在无法访问JSON常量的PHP 5.3.0环境中, 则可能需要在使用它们之前在项目中的所有位置定义所有常量, 因此这些常量将存在, 因此不再显示警告。 :
<?php
// json_encode() options
define('JSON_HEX_TAG', 1); // Since PHP 5.3.0
define('JSON_HEX_AMP', 2); // Since PHP 5.3.0
define('JSON_HEX_APOS', 4); // Since PHP 5.3.0
define('JSON_HEX_QUOT', 8); // Since PHP 5.3.0
define('JSON_FORCE_OBJECT', 16); // Since PHP 5.3.0
define('JSON_NUMERIC_CHECK', 32); // Since PHP 5.3.3
define('JSON_UNESCAPED_SLASHES', 64); // Since PHP 5.4.0
define('JSON_PRETTY_PRINT', 128); // Since PHP 5.4.0
define('JSON_UNESCAPED_UNICODE', 256); // Since PHP 5.4.0
// json_decode() options
define('JSON_OBJECT_AS_ARRAY', 1); // Since PHP 5.4.0
define('JSON_BIGINT_AS_STRING', 2); // Since PHP 5.4.0
define('JSON_PARSE_JAVASCRIPT', 4); // upgrade.php
// json_last_error() error codes
define('JSON_ERROR_NONE', 0); // Since PHP 5.3.0
define('JSON_ERROR_DEPTH', 1); // Since PHP 5.3.0
define('JSON_ERROR_STATE_MISMATCH', 2); // Since PHP 5.3.0
define('JSON_ERROR_CTRL_CHAR', 3); // Since PHP 5.3.0
define('JSON_ERROR_SYNTAX', 4); // Since PHP 5.3.0
define('JSON_ERROR_UTF8', 5); // Since PHP 5.3.3
define('JSON_ERROR_RECURSION', 6); // Since PHP 5.5.0
define('JSON_ERROR_INF_OR_NAN', 7); // Since PHP 5.5.0
define('JSON_ERROR_UNSUPPORTED_TYPE', 8); // Since PHP 5.5.0
?>
定义它们之后, 你将能够照常使用代码:
<?php
echo json_encode(array(), JSON_PRETTY_PRINT);
编码愉快!
评论前必须登录!
注册