gpt4 book ai didi

PHP 字符串比较怪异

转载 作者:可可西里 更新时间:2023-11-01 01:09:48 25 4
gpt4 key购买 nike

我正在将数据库中的字符串与数组中的字符串列表进行比较:

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

这适用于 other-string,但不适用于 Söme string,主要区别在于该字符串中有元音变音和 html 实体。如果 $entry 是数据库中的 Söme string,则比较失败,即使它应该是相同的字符串。

我也试过strcmp和使用=====直接比较,但是比较总是负数。在比较之前,我还尝试了 utf8_encode,但没有任何作用。

数据库使用 UTF-8,我使用 Drupal API 函数获取数据,我的 php 文件也是 UTF-8 编码的。如果我将 $entrySöme string 打印到输出 HTML,它们是无法区分的。

知道是什么导致了这种行为吗?

更新

感谢您的帮助。似乎   在途中被转换并作为真正的不间断空间存储在数据库中,而不是作为 HTML 实体。打印它会将其转换回 HTML 实体(或者当我查看它时,Firebug 可能会这样做)。

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"

最佳答案

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

  • $entry 有一个实际的空间而不是一个不间断的空间。
  • 一个具有 HTML 实体  ,而另一个具有实际的不间断空格。
  • 在其中一个脚本中,字符 ö 被分解,而在另一个脚本中则没有。

尝试var_dump 数组和$entry

关于PHP 字符串比较怪异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3665846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com