如何摆脱PHP警告(json_encode()期望参数2长,给定字符串)

本文概述

  • A.使用常数整数值
  • B.自己定义JSON常量
警告” json_encode()期望参数2长, 给定字符串” 之所以发生, 通常是因为你提供的不是常量的数目, 而是字符串作为json_encode的第二个参数。发生这种情况通常是因为你将不存在的常量用作第二个参数, 例如在PHP 5.3中使用JSON_PRETTY_PRINT:
< ?phpecho 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 => 1JSON_HEX_AMP => 2JSON_HEX_APOS => 4JSON_HEX_QUOT => 8JSON_FORCE_OBJECT => 16JSON_NUMERIC_CHECK => 32JSON_UNESCAPED_SLASHES => 64JSON_PRETTY_PRINT => 128JSON_UNESCAPED_UNICODE => 256JSON_ERROR_DEPTH => 1JSON_ERROR_STATE_MISMATCH => 2JSON_ERROR_CTRL_CHAR => 3JSON_ERROR_SYNTAX => 4JSON_ERROR_UTF8 => 5JSON_OBJECT_AS_ARRAY => 1JSON_BIGINT_AS_STRING => 2

然后, 只需将其作为json_encode方法中的第二个参数提供即可, 例如JSON_PRETTY_PRINT:
< ?phpecho json_encode(array(), 128);

上一个代码段将不再显示警告, 以此类推, 以及你要使用的其他常量。
B.自己定义JSON常量如果你在无法访问JSON常量的PHP 5.3.0环境中, 则可能需要在使用它们之前在项目中的所有位置定义所有常量, 因此这些常量将存在, 因此不再显示警告。 :
< ?php// json_encode() optionsdefine('JSON_HEX_TAG', 1); // Since PHP 5.3.0define('JSON_HEX_AMP', 2); // Since PHP 5.3.0define('JSON_HEX_APOS', 4); // Since PHP 5.3.0define('JSON_HEX_QUOT', 8); // Since PHP 5.3.0define('JSON_FORCE_OBJECT', 16); // Since PHP 5.3.0define('JSON_NUMERIC_CHECK', 32); // Since PHP 5.3.3define('JSON_UNESCAPED_SLASHES', 64); // Since PHP 5.4.0define('JSON_PRETTY_PRINT', 128); // Since PHP 5.4.0define('JSON_UNESCAPED_UNICODE', 256); // Since PHP 5.4.0// json_decode() optionsdefine('JSON_OBJECT_AS_ARRAY', 1); // Since PHP 5.4.0define('JSON_BIGINT_AS_STRING', 2); // Since PHP 5.4.0define('JSON_PARSE_JAVASCRIPT', 4); // upgrade.php// json_last_error() error codesdefine('JSON_ERROR_NONE', 0); // Since PHP 5.3.0define('JSON_ERROR_DEPTH', 1); // Since PHP 5.3.0define('JSON_ERROR_STATE_MISMATCH', 2); // Since PHP 5.3.0define('JSON_ERROR_CTRL_CHAR', 3); // Since PHP 5.3.0define('JSON_ERROR_SYNTAX', 4); // Since PHP 5.3.0define('JSON_ERROR_UTF8', 5); // Since PHP 5.3.3define('JSON_ERROR_RECURSION', 6); // Since PHP 5.5.0define('JSON_ERROR_INF_OR_NAN', 7); // Since PHP 5.5.0define('JSON_ERROR_UNSUPPORTED_TYPE', 8); // Since PHP 5.5.0?>

定义它们之后, 你将能够照常使用代码:
< ?phpecho json_encode(array(), JSON_PRETTY_PRINT);

【如何摆脱PHP警告(json_encode()期望参数2长,给定字符串)】编码愉快!

    推荐阅读