2010-11-04 21 views
9

Ho un file php che ha il seguente testo:Browser visualizza invece di '

<div class="small_italic">This is what you´ll use</div> 

Su un server, esso appare come:

This is what you´ll use 

E su un altro, come:

This is what you�ll use 

Perché dovrebbe esserci una differenza e cosa posso fare per farlo apparire correttamente (come un apostrofo)?


nota a tutti (per riferimenti futuri)

ho implementato/suggerimento di Gumbo di Gordon, tranne che ho implementato su un livello di server piuttosto che il livello di applicazione. Si noti che (a) ho dovuto riavviare il server Apache e, cosa più importante, (b) ho dovuto sostituire i "dati non validi" esistenti con i dati corretti nella codifica corretta.

/etc/php.ini

default_charset = "iso-8859-1"

+8

Sembra un problema di codifica per me. Ad ogni modo, perché non usi ''' invece di '' 'come tutti gli altri? : D – Shikiryu

+2

controllare il set di caratteri del documento restituito (intestazioni) ci può essere la spiegazione, in ogni caso puoi semplicemente usare '’' – Hannes

+6

E aggiungerò: _Questo odora come copia/incolla di Word_ – Shikiryu

risposta

16

Bisogna fare in modo, il contenuto viene servito con il corretto charset:

consiglia di inviare il contenuto con un header che include

<?php header("Content-Type: text/html; charset=[your charset]"); ?> 

o - se HTTP charset non esistono le intestazioni - inserire un <META> element nel <head>

<meta http-equiv="Content-Type" content="text/html; charset=[your charset]" /> 

Come il nome dell'attributo suggerisce http-equiv è l'equivalente di un'intestazione di risposta HTTP e definite dall'utente agenti li devono utilizzare nel caso in cui le intestazioni http corrispondenti non sono impostati.

EDIT1: Come già suggerito da Hannes nei commenti alla domanda, è possibile esaminare le intestazioni restituite dal proprio server Web per vedere quale codifica serve. È probabile una discrepanza tra i due server. Quindi modifica la parte [your charset] in alto a quella del server "funzionante".

EDIT2 per una spiegazione più dettagliata sul perché, see Gumbo's answer.

+0

Come sai che il suo documento è in UTF-8? – RoToRa

+6

@Gordon +1. Tutti dovrebbero usare Unicode. – pltvs

+1

Sbagliato. il meta ersatz non influisce su nulla. Solo l'intestazione HTTP. –

0

Imposta il set di caratteri del browser su un valore definito:

E.g.

<meta http-equiv="content-type" content="text/html; charset=utf-8" /> 
0

1) creare .htaccess file nella directory principale:

AddDefaultCharset utf-8 
AddCharset utf-8 * 
<IfModule mod_charset.c> 
CharsetSourceEnc utf-8 
CharsetDefault utf-8 
</IfModule> 

2) <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

8

Il display del SOSTITUZIONE CARATTERE (U + FFFD) probabile che la sei specifying your output come Unicode ma i tuoi dati non lo sono.

In questo caso, se il ACUTE ACCENT´ è per esempio codificato usando ISO 8859-1, è codificato con la sequenza di byte 0xB4 quanto questo è il punto di codice di quel carattere nella norma ISO 8859-1. Ma quella sequenza di byte è illegale in una codifica Unicode come UTF-8. In tal caso viene mostrato il carattere di sostituzione U + FFFD.

Quindi, per risolvere questo problema, assicurarsi di essere specifying the character encoding properly in base al proprio (o viceversa).

0

Questo è probabilmente causato dai dati che si stanno inserendo nella pagina con PHP che si trova in una codifica di caratteri diversa dalla pagina stessa (l'iterazione più comune è una latina 1 e l'altra UTF 8). Controlla la codifica utilizzata per la pagina e per il tuo database. Le probabilità sono che ci sarà una discrepanza.

1

La soluzione semplice è utilizzare il codice ASCII per caratteri speciali.

il valore del carattere apostrophe in ASCII è &#8217;. prova a inserire questo valore nel tuo html e dovrebbe funzionare correttamente per te.

Spero che questo aiuti!

+0

ASCII ha solo un carattere di apostrofo e questo è a 0x27. Il riferimento di carattere '’' si riferisce al carattere U + 2019 * MARCHIO DI QUOTAZIONE SINGOLA DESTRA * in Unicode. – Gumbo

+0

@Gumbo: IL SINGOLO MARCHIO DI SINGOLA DESTRA ** è ** il carattere corretto per un apostrofo: http://www.languagegeek.com/typography/apostrophes.html – RoToRa

+0

Presumo che intendesse che '’' era una pura stringa ascii piuttosto rispetto al personaggio che rappresentava era ascii. – Chris

1

Insomma forse un po ':

  1. assicurarsi che il file salvato sul server web ha la codifica giusta
  2. Assicurarsi che il web server fornisce anche con la codifica giusta
  3. Assicurati che i metatag HTML siano impostati sulla giusta codifica
  4. Assicurati di usare caratteri speciali "standard", ad esempio usa "anziché" per scrivere qualcosa come "codice di Luke Skywalker"

Per la codifica, UTF-8 potrebbe fare bene.

Se questa risposta aiuta, contrassegnare come corretto o votare per esso. THX

+0

Hai risolto il tuo problema? – Czar

Problemi correlati