PHP中的字符串比较问题

时间:2011-01-03 21:20:56

标签: php string-comparison

我有两个看似相同的值的字符串。一个存储为数组中的键,另一个存储在另一个不同的数组中。我使用==,===和strcmp比较两者。所有都将它们视为不同的字符串我做了一个var_dump,这就是我得到的。

string(17) "Valentine’s Day" 
string(15) "Valentine's Day"

有没有人知道为什么第一个字符串是17个字符而第二个字符串是15?

更新:当我从我的编辑器中粘贴它时,这稍微明显一点,它的字体使得两个不同的撇号几乎无法区分。

3 个答案:

答案 0 :(得分:8)

第一个字符串包含撇号的Unicode字符,而第二个字符串只有常规的ASCII字符。

Unicode字符占用更多空间。

如果您对每个字符运行PHP ord()函数,您会看到每个字符都有不同的值:

echo ord("’"); //226 This is just the first 2 bytes (see comments below for details from ircmaxell)
echo ord("'"); //27

答案 1 :(得分:1)

作为上述@Mark答案的补充是正确的(是一个多字节字符,很可能是UTF-8,而'则不是)。您可以使用iconv轻松将其转换为ASCII(或ISO-8859-1),例如:

echo iconv('utf-8', 'ascii//TRANSLIT', $str);

注意:并非所有字符都可以从多字节转换为ASCII或latin1。您可以使用//IGNORE将其从结果字符串中删除。

答案 2 :(得分:0)

'!='

为主。如果你想要这不是一个问题,你可以做这样的事情。

if(str_replace(''','\'',“情人节”)==“情人节”){