2013-03-22 5 views
5

Qui ci sono due versioni di una riga in un file php:Perché incollare una riga infrange il codice se la scrittura della stessa riga a mano funziona correttamente?

Prima versione:

if ($projet['sourceDonnees'] === (string)$CONSTANTS['sourceDonnees_saisie']) { 

Seconda versione:

if ($projet['sourceDonnees'] === (string)$CONSTANTS['sourceDonnees_saisie']) { 

Anche se sembrano identici, la prima versione risultati in un PHP Parse error: syntax error, unexpected T_STRING, mentre la seconda versione funziona bene. La differenza tra i due è che la prima versione è stata incollata e modificata mentre la seconda versione è stata scritta a mano interamente. Cosa sta succedendo qui?

Note: la riga è stata copiata da un file di testo codificato in UTF-8 e incollato in un altro file di testo UTF-8. Tutte le operazioni eseguite all'interno di gedit, entrambi i file scritti da me in gedit.

+4

Se il tuo editor ha la possibilità di mostrare i simboli, prova ad accenderlo e vedi se Tit aiuta a far luce. – Jrod

+1

Uso BBEdit che consente di attivare l'opzione per visualizzare i caratteri invisibili. Di solito il codice che trovo online e viene copiato da un browser è totalmente corrotto da una junk invisibile.È meglio ri-digitare il codice che trovi online se il tuo editor non è abbastanza avanzato da mostrarti i personaggi vaganti. Nel tuo codice, BBEdit mi mostra un personaggio invisibile proprio tra ']' e '=== ', come questo'] • === '. Riscrivilo con uno spazio. – Sparky

+0

@Sparky Come si scrive solitamente quel personaggio? Forse l'ho digitato per errore nella stringa originale ... – Shawn

risposta

3

Quando ho copiato & incollato la vostra prima linea nel mio editor di testo e accesi la "Mostra caratteri invisibili" opzione, si presentava così:

enter image description here

if ($projet['sourceDonnees']•=== (string)$CONSTANTS['sourceDonnees_saisie']) { 

Avviso del tra il ] e lo ===.

La seconda riga di codice ha mostrato perfettamente pulito.

Molte volte si raccolgono caratteri invisibili quando si copia & incolla il testo da siti Web. Tuttavia, non so quale combinazione di tastiere la riprodurrà da zero.

un'ulteriore sperimentazione rivela questo personaggio invisibile come "non-ASCII" ... l'editor di testo BBEdit semplicemente li chiama "Gremlins", e ha anche una funzione di "gremlins zap".

5

Hai copiato le virgolette UTF-8, che non sono in grado di analizzare da PHP. Rimuovere le virgolette e sostituirle con equivalenti ASCII (ad esempio digitandole).

Per ulteriori informazioni su ASCII vs virgolette UTF-8 vedere http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html

+0

Davvero? Entrambe le righe sono state scritte da me usando le stesse virgolette nello stesso editor di testo ... – Shawn

+0

Non posso dirti come sarebbe successo al tuo file in particolare, ma posso praticamente garantire che le virgolette siano state convertite in il loro equivalente in unicode (avendolo fatto capitare alcune volte prima, di solito copiando da blog). Puoi usare 'xxd' per controllare i codici esadecimali se vuoi davvero approfondirli ... –

0

unexpected T_STRING di solito è un problema con le vostre citazioni o di segni di graduazione. Gli ' nel codice che hai copiato sono UTF-8 e probabilmente una versione dell'offerta che PHP non può analizzare, come i backtick che usiamo per il codice inline qui su SO. Prova a cambiarli in una singola quota regolare e probabilmente risolverà il tuo problema.

In caso contrario, assicurati di non mancare il punto e virgola alla fine della tua funzione. Questo può causare lo stesso errore.

Problemi correlati