2010-08-28 4 views
7

¿Hay alguna manera de corregir los caracteres que se muestran incorrectamente después de ejecutar este marcado html a través de phpquery :: newDocument? En el documento original, hay citas dobles en torno a "Clásicos con mujer moderna" que terminan exhibiéndose incorrectamente después de crear el nuevo documento con phpquery.Corregir la codificación mostrada incorrectamente en 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); 

salida original: el Sr. Smith, de Bangkok celebra los “clásicos con moderno de la mujer”.

Nuevo documento de salida: Sr. Smith de Bangkok celebró el Classics con la mujer moderna.

Respuesta

22
  1. Debe guardar la página con la codificación UTF-8 without BOM.
  2. Añadir esta cabecera en la parte superior de su script:

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

[EDIT]: Cómo guardar archivos como UTF-8 sin BOM:

A petición OP, así es como puede hacerlo en Windows:

  1. Descargar Notepad++. Es un impresionante editor de texto que deberías estar usando.
  2. Instalarlo.
  3. abre el script PHP en Notepad ++ que contiene este código. La página donde estás haciendo toda la codificación. Sí, ese archivo en tu computadora.
  4. En Notepad ++, en el menú Codificación en la parte superior, seleccione "Convertir a UTF-8 sin BOM".
  5. Guarde el archivo.
  6. Cargue en su servidor web por FTP o lo que sea que use.
  7. Ahora, ejecute esa secuencia de comandos.
+0

+1 porque he tenido este problema antes cuando estaba en Windows .... esto es Windows guardando archivos como CP1251 (o lo que sea la página de códigos). Todo debe guardarse siempre como UTF-8 y el contenido enviado también con UTF-8. Linux no tiene este problema :) –

+0

@Yanick, lo mismo aquí. – shamittomar

+0

intentado agregar-encabezado ("Content-Type: text/html; charset = UTF-8"); - en la parte superior del script, pero no lo solucionó. ¿Puedes expresar lo que quieres decir con la página que se guarda en este ejemplo? No creo que la página se guarde nunca, pero existe en la memoria en el servidor de Linux antes de ser recreada por phpquery :: newdocument(). Si es posible, ¿puede mostrar cómo insertar este código correctamente? ¿O cómo guardar el documento con la codificación correcta? Puedo estar haciendo algo mal. Gracias – JMC

1

Usted tiene esto en el elemento <head>:

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

El próximo curso sería el uso de entidades HTML para visualizar estos caracteres.

+0

esto no resolverá el problema si el archivo en sí no se guarda como UTF-8 –

2

tuve el mismo problema, pero cuando he añadido

ob_start(); 

a primera línea

ob_end_flush(); 

al extremo que parecen estar trabajando

1

que tenía el mismo problema usando phpQuery clase. El problema ES como se mencionó anteriormente, en la respuesta más votado - el archivo de script se guarda como UTF8 - con BOM.

ya que no tenía ninguna posibilidad de conseguir Notepad ++ en Mac OS X,

cada salida I preparados como esto utf8_decode()

lista de materiales es para MS-Windows.

Cuestiones relacionadas