【问题标题】:is it safe to use a email id as a key for array in php [duplicate]在php中使用电子邮件ID作为数组的键是否安全[重复]
【发布时间】:2016-08-23 19:32:15
【问题描述】:

我正在尝试在 php 中执行以下操作

array(
  'email@domain.com' => 'something',
  ...
);

我确实读过 php 接受并将数字或有效字符串作为键。

将电子邮件 ID 作为上述数组中的键是否安全? 安全我的意思是这可能会导致任何类型的错误或异常或问题编码时使用此

注意: 我将在这个数组中有几个 100 项,在我执行此操作时需要注意什么

请告诉我

【问题讨论】:

  • 是的,只要你修复那个缺失的报价。
  • 非常感谢。 @Sammitch 感谢您指出问题中缺少的引号
  • @Rick 很好的发现。我将把它标记为那个的副本。
  • 字符串就是字符串。您认为电子邮件地址与任何其他字符串有何不同?

标签: php arrays array-key


【解决方案1】:

简短回答:如果它可以是 PHP 中的字符串,现在,它可以安全地用作关联数组键。

长答案:来自PHP manual

键可以是整数或字符串。该值可以是任何 输入。

此外,还会发生以下关键转换:

包含有效整数的字符串将被转换为整数类型。 例如。密钥“8”实际上将存储在 8 之下。另一方面 "08" 不会被强制转换,因为它不是有效的十进制整数。

花车是 也转换为整数,这意味着小数部分将是 截断。例如。密钥 8.7 实际上将存储在 8 下。布尔值是 也转换为整数,即键 true 将实际存储在 1 和 0 以下的键 false。

Null 将被强制转换为空字符串, 即密钥 null 将实际存储在“”下。

数组和对象 不能用作钥匙。这样做会导致警告:非法 偏移类型。

如果数组声明中有多个元素使用 相同的密钥,只有最后一个将与其他所有密钥一样使用 覆盖。

【讨论】:

  • 这看起来几乎是安全的,但请考虑是否有任何带数字的字符串 LEADING 将被转换为 int,并将其余的“8mile@bigfen.com”存储为8。因此,如果您对电子邮件有任何控制权并且您确定它们的格式为“firstname.lastname...”,它可以工作,但不适用于公共电子邮件。
  • @d.raev 我刚刚做了一个本地测试,您使用的同一个电子邮件示例 (8mile@bigfen.com) 并没有截断为 8。这似乎与我链接的 PHP 手动转换规则一致。我不确定您是如何得出结论的,您能详细说明一下吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-20
  • 2022-01-23
  • 2013-05-27
  • 2012-07-20
  • 1970-01-01
  • 1970-01-01
  • 2017-08-12
相关资源
最近更新 更多