Domanda

Domanda rapida, come posso fare questo valido:

if($this->datos->bathrooms == "1½"){$select1 = JText::_( 'selected="selected"' );}

Il ½ non sembra essere riconosciuto. Ho cercato di scrivere come ½ ma poi cerca ½ letteralmente, e non il segno ½. Tutte le idee?

È stato utile?

Soluzione

Come molti altri hanno notato, hai un problema di codifica dei caratteri, molto probabilmente. Non sono sicuro di quello che codifiche supporta PHP, ma è necessario prendere l'intero quadro in considerazione. Per questo esempio sto assumendo il tuo script PHP sta rispondendo a un post FORM.

  1. Alcune app (il vostro, più probabile) scrive un po 'di HTML che è codificato utilizzando alcuni codifica e inviato al browser. scelte comuni sono ISO-8859-1 e UTF-8. Si dovrebbe sempre usare UTF-8, se potete. Nota:. Non è il default per il web (purtroppo)
  2. Il browser scarica questa html e visualizza la pagina. I browser utilizzano Unicode internamente, per lo più, o qualche superset. L'utente invia un modulo. I dati in questa forma è codificato, di solito con la stessa codifica che la pagina è stata inviata dentro. Quindi, se si invia UTF-8 che viene inviato di nuovo voi come UTF-8.
  3. PHP legge il byte della richiesta in entrata e imposta le sue variabili interne. Questo è dove si potrebbe avere un problema, se non è in ripresa la codifica a destra.
  4. Si sta facendo un confronto di stringhe, che si decompone a un confronto byte, ma i byte che compongono i caratteri dipende dalla codifica utilizzata. Come Peter Bailey ha scritto ,

    • In ISO-8859-1 questo carattere è codificato come 0xBD
    • In UTF-8 questo carattere è codificato come 0xC2BD

È necessario verificare la codifica del testo lungo ogni passo del cammino per assicurarsi che sta accadendo come previsto. È possibile verificare i dati inviati al browser cambiando la codifica dalla codifica rilevato automaticamente il browser per qualcos'altro per vedere come la pagina cambia.

Se i dati non è venuta dal browser, ma piuttosto dal DB, è necessario controllare le codifiche tra l'app e DB.

Infine, mi suggeriscono che è poco pratico da usare una stringa come 1½ come chiave per il confronto come sei. Mi consiglia di utilizzare 1,5 e rilevando che al momento di visualizzazione, quindi modificando come i dati vengono visualizzati solo. Vantaggi:. È possibile ordinare i risultati per numero di stanze da bagno se il valore è numerico al contrario di una stringa, ecc Inoltre si evita errori come questo

Altri suggerimenti

Il personaggio che stai cercando è il carattere Unicode volgare Frazione One metà

Ci sono una moltitudine di modi per assicurarsi che si sta visualizzando correttamente questo personaggio, ognuno dei quali dipendono la codifica dei dati. Guardando qui possiamo vedere che

  • In ISO-8859-1, una codifica popolare occidentale, questo carattere è codificato come BD
  • In UTF-8, una codifica popolare internazionale, questo carattere è codificato annuncio C2BD

Ciò significa che se il file PHP è codifica UTF-8, ma si sta inviando questo al browser come ISO-8850-1 (o viceversa), il personaggio non renderà correttamente.

Come altri hanno scritto, è anche possibile utilizzare l'Entità HTML per questo personaggio che sarà di codifica dei caratteri agnostico e sarà sempre il rendering (in HTML) correttamente, indipendentemente dalla codifica in uscita.

Prova a confronto con "1½"

Utilizzare il PHP chr funzione per creare il carattere mediante il suo esagono 0xBD DEC 189:

if($this->datos->bathrooms == "1".chr(189)){$select1 = JText::_( 'selected="selected"' );}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top