【问题标题】:Cannot use array_search() when entity has Apostrophes in them当实体中有撇号时不能使用 array_search()
【发布时间】:2016-08-01 09:44:05
【问题描述】:

我遇到了一个问题,我有一个公司列表作为一个数组,我正在使用 array_search() 从这个数组中获取密钥以作为 ID 存储在数据库中。

这适用于我公司的所有公司,但带有撇号的公司除外! 我不知道 array_search() 的具体工作原理,但我找不到在线发布的解决方案。

<?php
$array = array("pipefix", "Housing ltd","o'briens roofing","argos");
$search = "o'briens roofing";

$id = array_search($search, $array);
print_r($id);

这显然不是我的确切代码,但原理相同,我正在尝试为我的公司搜索数组,但如果其中包含 ',它将始终不返回任何内容!对此有何想法或解决方案?

【问题讨论】:

  • 你试过用`\`转义它们
  • array_search 不会对任何字符进行特殊处理。
  • 我怀疑问题在于搜索字符串和数组中有不同的字符,比如其中一个是智能引号,而不是常规的 ASCII 撇号。
  • 您发布的代码运行良好:ideone.com/wmudYk
  • 我只是尝试为它创建一个新的输入,就像我在这段代码中所做的那样。它也不起作用,我认为这可能是 barmar 建议的智能报价,但是当我从 API 中提取数组时,我该如何解决?

标签: php arrays json curl htmlspecialchars


【解决方案1】:

我使用的数组是从另一个数据库中提取的存储信息,并发布在我无法控制的 API 上。

我不存储我的数据库,我只存储 [ID's] 用于管理和输入。

提取的数组在检索时是 HTML 编码的。

我使用 JSONcUrl 从 API 中提取了这个数组。这意味着当我第一次获取数组值时,Apostrophe 已转换为 &amp;apos;s

我认为使用htmlsecialchars_decode() 会恢复这一点。感谢 Ryan Vincent,他向我展示了问题是在使用 cUrl 拉取时创建的。

不幸的是,我无法更改此设置,因此在创建数组时,我现在执行str_replace() 并简单地删除&amp;apos;s

这意味着一旦显示它在技术上是不正确的。但由于这仅由少数人使用,因此执行此操作比每次搜索都必须在后端执行此操作更有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多