【问题标题】:echo json_encode($return_data, JSON_NUMERIC_CHECK); character 'e' in digits not workingecho json_encode($return_data, JSON_NUMERIC_CHECK);数字中的字符“e”不起作用
【发布时间】:2015-03-11 09:31:57
【问题描述】:

我的数据库的一行有联系人表有字符变化列作为电话,值为 3162e6313358

$return_data = array('phone' => $contact_phone);
echo json_encode($return_data, JSON_NUMERIC_CHECK);

这段代码没有给我任何输出。 我搜索了这个人提供的解决方案,例如 ('phone' => '".$contact_phone."') 这是有效的。 我不想为每个数组元素进行类型转换 但我需要通用解决方案。

谢谢。

【问题讨论】:

  • Json 编码如果失败则返回布尔值。无论如何,如果我使用给定值运行此代码:Warning: json_encode() [function.json-encode]: double INF does not conform to the JSON spec, encoded as 0
  • 在我的系统上,这也没有发出警告,输出只是空白。这是我尝试过的 php -a Interactive shell php > $a = ['a'=>"1", 'b'=>NULL, 'c'=>"3162e6313358"]; php > echo json_encode($a, JSON_NUMERIC_CHECK);
  • 数据可以有字母,为什么还需要JSON_NUMERIC_CHECK?
  • @deceze 我说了吗?我使用了具有最一般含义的“数字”。我没有提到任何关于“电话”的事情。 “将字符串转换为 numeric 属性的数字”。由于您提到的原因,电话号码不是数字,即使他们有这个名字;此外,它们不遵循数字的语义:两个电话“数字”相加或相​​乘是没有意义的。
  • @axiac Quote: “它的用法在代码中隐藏了一个更深层次的问题:你将数字存储为字符串” - 听起来你好像建议将电话号码存储为整数. :)

标签: php json postgresql


【解决方案1】:

选项 1(最佳)

  1. 从用户输入($_GET[]$_POST[])或数据库中获取数值(ID、计数、数值状态代码、布尔值)后,立即将它们转换为数字。当它们从用户输入中提取出来时,转换应该是数据验证的一部分。

  2. 将电话“数字”保存为字符串;它们不是数字,毕竟它们只是一串数字,有或没有开头的零和中间或结尾的非数字字符。还将其他看起来是数字但实际上不是数字的值保留为字符串:例如信用卡号。

  3. 从对json_encode()的调用中删除JSON_NUMERIC_CHECK参数;如果你实现了上面的#1,你就不再需要它了。

选项 2(解决方法)

当您从数据库中获取电话号码时,将空格字符 (' ') 添加到电话号码。当它显示在网页中时,它不会有太大的区别(如果有的话)。

json_encode() 不再相信它是一个浮点数,即使它以+0 开头也不行。

【讨论】:

  • 感谢您的回答。我已经完成了我的应用程序的大部分部分,并且更改许多表的许多列的值或更改用户输入的代码非常耗时,这是我最后的选择。
  • @maheshkajale 如果您现在继续并纠正潜在问题,它将更容易维护。
猜你喜欢
  • 1970-01-01
  • 2013-06-06
  • 1970-01-01
  • 2012-12-18
  • 1970-01-01
  • 2012-04-03
  • 1970-01-01
  • 2019-03-02
  • 2016-01-12
相关资源
最近更新 更多