我有两个看似相同的值的字符串。一个存储为数组中的键,另一个存储在另一个不同的数组中。我使用==,===和strcmp比较两者。所有都将它们视为不同的字符串我做了一个var_dump,这就是我得到的。
string(17) "Valentine’s Day"
string(15) "Valentine's Day"
有没有人知道为什么第一个字符串是17个字符而第二个字符串是15?
更新:当我从我的编辑器中粘贴它时,这稍微明显一点,它的字体使得两个不同的撇号几乎无法区分。
答案 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(''','\'',“情人节”)==“情人节”){