2011-07-10 15 views
17

¿Pero por qué?Cadena no es igual a

if ('i' == 'і') 
    echo 'good'; 
else 
    echo 'bad'; 

ecos:

>> bad 

debería copiar este fragmento. Si lo escribe a mano, funcionará.
Me vuelve loco.

Respuesta

56

¡Eres astuto! El segundo no es una minúscula latina pequeña i. Me hexdumped que:

hexdump -C check 
00000000 69 66 20 28 27 69 27 20 3d 3d 20 27 d1 96 27 29 |if ('i' == '..')| 
00000010 0a 20 20 20 20 65 63 68 6f 20 27 67 6f 6f 64 27 |. echo 'good'| 
00000020 3b 0a 65 6c 73 65 0a 20 20 20 20 65 63 68 6f 20 |;.else. echo | 
00000030 27 62 61 64 27 3b 20 20 0a 0a     |'bad'; ..| 
0000003a 

Voy a dejar que mira hacia arriba D1 96 :-) enigma tricksy impresionante. 1

+1

+1 Para el vertedero, fueron más allá de mí, señor. –

+7

Sí, la 'i' derecha es el carácter Unicode U + 0456: 'PEQUEÑA LETRA CYRÍLICA BYELORUSSIAN-UKRAINIAN I'. http://www.fileformat.info/info/unicode/char/search.htm?q=%D1%96&preview=entity –

+0

Entendido. Fue entrada del usuario, y estaba en inglés, así que no pensé que era de otro idioma. – Qiao

1

Otra manera de demostrar visualmente ('i' != 'і') !!

http://jsfiddle.net/naeDE/1/

<pre style="font-size:700%"> 
if ('i' == 'і') 
    echo 'good'; 
else 
    echo 'bad'; 
</pre> 
+0

+1 Aunque depende de la fuente: por ejemplo, en Safari, en el código de esta respuesta, las dos son indistinguibles para mí, incluso con el zoom. (Aunque en el violín parecen diferentes para mí, ahora mismo, pero este no es siempre el caso). –