如何使用PHP保持前导零json_encode()

时间:2014-08-25 02:54:21

标签: php json

是否有一种简单的方法可以使用json_encode()在PHP中保留前导零?在下面的示例中,我需要将结果设为"columnA":"00123"

...pdo query...
$data = $myQuery->fetch(PDO::FETCH_ASSOC);
//trigger_error('columnA: '.$data['columnA']); This reports it correctly: 00123
echo json_encode($data); //after this call it reports: "columnA":"123"

我使用的是JSON_NUMERIC_CHECK选项,因为我经常为true / false返回1和0,所以我认为这会导致零被剥离。所以我删除了那个选项,所以所有内容都被视为一个字符串,但它仍然删除了零。

3 个答案:

答案 0 :(得分:2)

前导零将始终从整数和浮点数中删除,因此您需要先将值转换为字符串,例如:

$data = $myQuery->fetch(PDO::FETCH_ASSOC);
$data['columnA'] = (string)$data['columnA'];
echo json_encode($data);

答案 1 :(得分:0)

在导入带有尾随零的QR码时遇到相同的问题。 JSON_NUMERIC_CHECK导致此问题。 https://3v4l.org/6Gl7M

只需删除它,就可以了。

答案 2 :(得分:0)

您可以将“零宽度非连接符”附加到数字以防止 JSON_NUMERIC_CHECK 去除前导零。

<?php
$arr['lz'] = "0001"; 
$arr['lz'] .= "‌"; // < this contains a zero width non joiner character

print_r( json_encode($arr, JSON_NUMERIC_CHECK) );

这将被编码为:

{"lz":"0001\u200c"}

我更喜欢这种方法,因为我可以在文本输出中使用它并且它仍然不可见(懒惰)

例如在 javascript 中:console.log( arr.lz ) 将显示为“0001”

我建议为以后可能需要的任何内容(例如发票编号)去掉字符。 arr.lz.slice(0, -1)

要生成或复制这些字符之一,请尝试:https://unicode.flopp.net/c/200C