PHP字符串比较怪异

PHP字符串比较怪异,php,string,drupal,comparison,Php,String,Drupal,Comparison,我正在将数据库中的字符串与数组中的字符串列表进行比较: if (in_array($entry, array('Söme string', 'other-string'))) 这适用于其他字符串,但不适用于Söme字符串,主要区别在于该字符串中有一个umlaut和一个html实体。如果数据库中的$entry是Söme string,则比较失败,即使它应该是相同的字符串 我还尝试了strcmp和直接比较,使用==和==,但是比较总是否定的。在比较之前,我还尝试了utf8\u编码

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

if (in_array($entry, array('Söme string', 'other-string')))
这适用于
其他字符串
,但不适用于
Söme字符串
,主要区别在于该字符串中有一个umlaut和一个html实体。如果数据库中的
$entry
Söme string
,则比较失败,即使它应该是相同的字符串

我还尝试了strcmp和直接比较,使用
==
==
,但是比较总是否定的。在比较之前,我还尝试了
utf8\u编码
,但没有效果

数据库使用UTF-8,我使用Drupal API函数获取数据,我的php文件也是UTF-8编码的。如果我将
$entry
Sö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\u dump
数组和
$entry

问题是
$entry
包含UTF-8编码的非中断空间(0xc2a0)。仅仅在上面调用html_实体是不起作用的,因为我没有指定字符集。因此,我的解决方案如下:

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

连接有什么编码?PHP文件有什么编码?(定义硬编码字符串的源代码)或任何用于比较的源代码。@Gumbo Drupal在任何地方都使用UTF-8,因此我非常确定连接也使用UTF-8@Alexanderphp文件是UTF-8编码的。输入
$entry
UTF-8的表单也是编码的吗?