2011-07-10 14 views
17

Ma perché?La stringa non è uguale a se stessa

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

Echos:

>> bad 

È necessario copiare questo frammento. Se lo scrivi a mano, funzionerà.
Mi fa impazzire.

risposta

56

Sei furtivo! Il secondo io non è un minuscolo latino minuscolo. I hexdumped che:

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 

ti lascio guardare in alto D1 96 :-) impressionante enigma furbata. +1

+1

+1 Per la discarica, è andato al di là di me, signore. –

+7

Sì, l''i' di destra è il carattere Unicode U + 0456: 'PICCOLO LETTERA CYRILLIC BYELORUSSIAN-UKRAINIAN I'. http://www.fileformat.info/info/unicode/char/search.htm?q=%D1%96&preview=entity –

+0

Capito. È stato inserito dall'utente, ed era in inglese, quindi non pensavo che provenisse da un'altra lingua. – Qiao

1

Un altro modo per dimostrare ('i' != 'і') visivamente !!

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

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

+1 Anche se dipende dal tipo di carattere: ad esempio, in Safari, nel codice in questa risposta, i due sono indistinguibili per me, anche con lo zoom. (Anche se nel violino appaiono diversi per me, adesso, ma non è sempre così.) –

Problemi correlati