代码之家  ›  专栏  ›  技术社区  ›  Mad Scientist

PHP字符串比较怪异

  •  3
  • Mad Scientist  · 技术社区  · 14 年前

    if (in_array($entry, array('Söme string', 'other-string')))
    

    这适用于 other-string ,但不是为了 Söme string $entry Sme字符串 在数据库中,比较失败,即使它应该是相同的字符串。

    我也试过了 strcmp === == utf8_encode 在比较之前,但那没什么作用。

    数据库使用UTF-8,我使用drupalapi函数获取数据,我的php文件也是UTF-8编码的。如果我打印 $项 Sme字符串 对于输出HTML,它们是不可区分的。

    更新

    谢谢你的帮助。看来  

    var_dump()的输出(使用print函数,取自生成的html源):

    $entry: string(14) "Söme string"

    "Söme string": string(18) "Söme string"

    更新2

    "Some string" 下面是

    var_dump(bin2hex($entry));
    var_dump(bin2hex('Some string'));
    
    $entry: string(24) "536f6d65c2a0737472696e67"
    "Some string": string(32) "536f6d65266e6273703b737472696e67"
    
    2 回复  |  直到 14 年前
        1
  •  4
  •   Artefacto    14 年前

    那么字符串就不一样了。也许:

    • $entry
    •   而另一个有一个实际的不间断空间。
    • 在其中一个剧本中 ö 在另一种情况下,它不是。

    var_dump $项 .

        2
  •  0
  •   Mad Scientist    14 年前

    $entry 包含UTF-8编码的非中断空格(0xc2a0)。仅仅对它调用html\u实体是不起作用的,因为我没有指定字符集。所以我的解决方案是:

    htmlentities($entry, ENT_QUOTES, 'UTF-8')