是否有一种简单的方法可以使用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,所以我认为这会导致零被剥离。所以我删除了那个选项,所以所有内容都被视为一个字符串,但它仍然删除了零。
答案 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