2

当我将带有前导零数字的电话号码(即字符串)传递给 时json_decode,它会删除第一个零字符并将其转换为浮点数。

$string = '09178882356'; //dynamic value
echo json_decode($string); //9178882356 will be echo

如何预防?

编辑
弗洛伦特提供了一个解决方案来使用类似的东西:

echo json_decode('"'.$string.'"');

它有效,但如果$string是一个真正的 JSON 字符串,那么它会失败。

4

2 回答 2

3

您正在解码一个数字。您应该将代码更改为:

echo json_decode('"09178882356"');

编辑:

它有效,但如果$string是一个真正的 JSON 字符串,那么它会失败。

问题是您并不真正了解您的对象类型。也许你应该停止向这个函数发送真正的 JSON 字符串,或者在你的函数之外用引号括起你的数字。

你可以尝试这样的事情:

if (is_number($str)) {
    $str = '"'.$str.'"';
}

echo json_decode($str);
于 2013-10-01T16:06:33.750 回答
0

以下函数将考虑多个前导零并在遇到前导零时转换为字符串:

    function check_number($num){
        $re = '/[0]+/m';

        preg_match_all($re, $num, $matches, PREG_SET_ORDER, 0); 

        $leading_zero = $matches[0][0] ?? false;
        $length = 0;

        if( $leading_zero !== false){
            $length = strlen($num);

            $test = "%'.0{$length}d\n";

            return sprintf("%'.0{$length}d\n",$num);                
        }

        return $num;
    }
$one = '07';
$one = check_number($one) // returns '07' string with json_encode and JSON_NUMERIC_CHECK flag

$two = '007';
$two = check_number($two) // returns '007' string with json_encode and JSON_NUMERIC_CHECK flag

$num = 7;
$num = check_number($num) // returns 7 int with json_encode and JSON_NUMERIC_CHECK flag

于 2019-10-06T18:07:54.823 回答