本文概述
- A.使用常数整数值
- B.自己定义JSON常量
<
?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长,给定字符串)】编码愉快!
推荐阅读
- 如何在Symfony 1.4中检索当前模块的名称
- 如何在PHP中按键对关联数组进行分组
- 如何在Symfony 1.4中通过HTTPS(HTTP over SSL)强制全局访问
- Android JobScheduler需要先检查是否正常工作,然后再运行其他任务
- 无法解析Android中的方法'execute()'
- 通过在Android中实现Proguard,使用JDBC在Asynctask中崩溃
- Android Studio - 对象构造函数中的NetworkOnMainThreadException
- 无法将值传递给Android中的AsyncTask
- AsyncTask Android方法的技术差异