2010-08-28 6 views
7

C'è un modo per correggere i caratteri che vengono visualizzati in modo errato dopo l'esecuzione di questo markup html tramite phpquery :: newDocument? Ci sono delle virgolette doppie intorno a "Classici con donna moderna" nel documento originale che finiscono per essere visualizzate in modo non corretto dopo aver creato il nuovo documento con phpquery.Correzione errata della codifica visualizzata su un documento html con php

//Original document is UTF-8 encoded 
$raw_html = '<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body><p>Mr. Smith of Bangkok celebrated the “Classics with modern Woman”.</p></body></html>'; 
print($raw_html); 

$aNew_document = phpQuery::newDocument($raw_html); 
print($aNew_document); 

uscita originale: Mr. Smith di Bangkok ha celebrato i “Classici con la donna moderna”.

Nuovo documento prodotto: Mr. Smith of Bangkok ha celebrato la Classics with Modern Woman.

risposta

22
  1. È necessario salvare la pagina con la codifica UTF-8 without BOM.
  2. Aggiungi questa intestazione sulla parte superiore dello script:

    header("Content-Type: text/html; charset=UTF-8");

[EDIT]: come salvare i file in UTF-8 senza BOM:

Su richiesta OP, ecco come si può fare su Windows:

  1. Download Notepad++. È un editor di testo fantastico che dovresti usare.
  2. Installarlo.
  3. apre lo script PHP in Notepad ++ che contiene questo codice. La pagina in cui stai facendo tutta la codifica. Sì, quel file sul tuo computer.
  4. In Notepad ++, dal menu Codifica in alto, selezionare "Converti in UTF-8 senza BOM".
  5. Salvare il file.
  6. Carica sul tuo server web via FTP o qualsiasi altra cosa tu usi.
  7. Ora esegui lo script.
+0

+1 perché ho avuto questo problema prima quando ero in Windows .... questo è Windows che salva i file come CP1251 (o qualunque sia la tabella codici). Tutto dovrebbe sempre essere salvato come UTF-8 e contenuto inviato anche usando UTF-8. Linux non ha questo problema :) –

+0

@Yanick, lo stesso qui. – shamittomar

+0

Provato aggiungendo -header ("Content-Type: text/html; charset = UTF-8"); - nella parte superiore dello script, ma non lo ha risolto. Puoi articolare cosa intendi per pagina salvata in questo esempio? Non penso che la pagina sia mai stata salvata, ma esiste in memoria sul server linux prima di essere ricreata da phpquery :: newdocument(). Se possibile, puoi mostrare come inserire correttamente questo codice? O come salvare il documento con la codifica corretta? Potrei fare qualcosa di sbagliato. Grazie – JMC

1

Hai questo nell'elemento <head>:

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

Il prossimo corso sarebbe quello di utilizzare entità HTML per visualizzare questi caratteri.

+0

questo non risolverà il problema se il file stesso non viene salvato come UTF-8 –

2

ho avuto lo stesso problema, ma quando ho aggiunto

ob_start(); 

alla prima linea

ob_end_flush(); 

alla fine sembrano funzionare

1

Ho avuto lo stesso problema con phpQuery classe. Il problema è come menzionato sopra, nella risposta più votata - il file di script viene salvato come UTF8 con BOM.

Come ho avuto alcuna alcuna possibilità di ottenere Notepad ++ su Mac OSX,

ogni uscita ho preparato come questo utf8_decode()

BOM è pensato per MS-Windows.

Problemi correlati