2010-11-04 13 views
9

Tengo un archivo php que tiene el siguiente texto:navegador muestra en lugar de '

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

En un servidor, aparece como:

This is what you´ll use 

Y en otra, como:

This is what you�ll use 

¿Por qué habría una diferencia y qué puedo hacer para que aparezca correctamente (como un apóstrofo)?


Nota para todos (para referencia futura)

que implementa/sugerencia de Gumbo de Gordon, excepto que he implementado en un nivel de servidor en lugar de nivel de aplicación. Tenga en cuenta que (a) tuve que reiniciar el servidor apache y, lo que es más importante, (b) tuve que reemplazar los "datos incorrectos" existentes con los datos corregidos en la codificación correcta.

/etc/php.ini

default_charset = "iso-8859-1"

+8

Parece un problema de codificación para mí. De todos modos, ¿por qué no usas '' 'en lugar de''' como todos los demás? : D – Shikiryu

+2

revise el juego de caracteres del documento devuelto (encabezados) puede haber una explicación, en cualquier caso puede simplemente usar '’' – Hannes

+6

Y agregaré: _Esto huele como Word copy/paste_ – Shikiryu

Respuesta

16

Usted tiene que asegurarse, el contenido se sirve con el juego de caracteres correcto:

enviar el contenido con un header que incluye

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

o - si HTTP charset cabeceras no existen - insertar una <META> element en el <head>

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

Como el nombre sugiere atributo http-equiv es el equivalente de un encabezado de respuesta HTTP y agentes de usuario deben utilizar en caso las cabeceras HTTP correspondientes no están ajustadas.

EDIT1: Como Hannes ya se ha sugerido en los comentarios a la pregunta, se puede ver en las cabeceras devueltas por el servidor web para ver qué codificación que sirve. Es probable que haya una discrepancia entre los dos servidores. Cambie la parte [your charset] anterior a la del servidor "en funcionamiento".

Edit2 para una explicación más detallada sobre el por qué, see Gumbo's answer.

+0

¿Cómo sabes que su documento está en UTF-8? – RoToRa

+6

@Gordon +1. Todos deberían usar Unicode. – pltvs

+1

incorrecto meta ersatz no afecta a nada. Solo el encabezado HTTP lo hace. –

0

Fije su navegadores conjunto de caracteres a un valor definido:

P. ej

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

1) crear .htaccess archivo en el directorio raíz:

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

La pantalla del personaje SUSTITUCIÓN (T + FFFD) más probable es que el usted es specifying your output para ser Unicode pero sus datos no lo son.

En este caso, si el AGUDA ACCENT´ es, por ejemplo codificado utilizando ISO 8859-1, que está codificado con la secuencia de bytes 0xB4 ya que es el punto de que el carácter en la norma ISO 8859-1 código. Pero esa secuencia de bytes es ilegal en una codificación Unicode como UTF-8. En ese caso, se muestra el carácter de reemplazo U + FFFD.

Para solucionar esto, asegúrese de que sea specifying the character encoding properly de acuerdo con su actual (o viceversa).

0

Esto probablemente es causada por los datos que está insertando en la página con PHP estar en una codificación de caracteres diferente desde la propia página (la iteración más común es uno que es América 1 y el otro UTF-8). Verifique la codificación que se usa para la página y para su base de datos. Es probable que haya un desajuste.

1

La solución simple es usar el código ASCII para caracteres especiales.

el valor de apostrophe en ASCII es &#8217;. intente poner este valor en su html, y debería funcionar correctamente para usted.

Espero que esto ayude!

+0

ASCII tiene solo un carácter de apóstrofo y está en 0x27. La referencia de caracteres '’' se refiere al carácter U + 2019 * MARCACIÓN INDIVIDUAL CORRECTA * en Unicode. – Gumbo

+0

@Gumbo: CITA INDIVIDUAL CORRECTA MARK ** es ** el caracter correcto para un apóstrofo: http://www.languagegeek.com/typography/apostrophes.html – RoToRa

+0

Supongo que quiso decir que '’' era una cadena de caracteres ascii pura que el personaje que representaba era ascii. – Chris

1

Para resumir tal vez un poquito:

  1. Asegúrese de que el archivo guardado en el servidor web tiene la codificación correcta
  2. Asegúrese de que el servidor web también lo entrega con la codificación correcta
  3. Asegúrese de que las metaetiquetas HTML estén configuradas con la codificación correcta
  4. Asegúrese de utilizar caracteres especiales "estándar", es decir, utilice el símbolo "en lugar de" para escribir algo como "código de Luke Skywalker"

Para la codificación, UTF-8 podría ser bueno para usted.

Si esta respuesta sirve, marcar como correcta o votar por ella. THX

+0

¿Has resuelto tu problema? – Czar

Cuestiones relacionadas