个性化阅读
专注于IT技术分析

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

本文概述

警告” 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);

编码愉快!

赞(0)
未经允许不得转载:srcmini » 如何摆脱PHP警告:json_encode()期望参数2长,给定字符串

评论 抢沙发

评论前必须登录!