2011-04-20 29 views
8

Este es mi código PHP:UTF-8 caracteres no se muestran correctamente

<?php 
$result = ''; 
$str = 'Тугайный соловей'; 
for ($y=0; $y < strlen($str); $y++) { 
    $tmp = mb_substr($str, $y, 1); 
    $result = $result . $tmp; 
} 
echo 'result = ' . $result; 

La salida es:

Тугайный Ñоловей 

¿Qué puedo hacer yo? Tengo que poner $result en una base de datos MySQL.

Respuesta

15

¿Cuál es la codificación de su archivo? Debería ser UTF8 también. ¿Cuál es el juego de caracteres predeterminado de su servidor http? Debería ser UTF-8 también.

codificación sólo funciona si:

  • el archivo está codificado correctamente
  • el servidor le dirá cuál es la codificación del archivo entregado.

Cuando se trabaja con bases de datos, también hay que establecer la codificación correcta para sus campos DB y la forma en que el cliente de MySQL se comunica con el servidor (véase mysql_set_charset()). Los campos solo no son suficientes porque su cliente MySQL (en este caso, PHP) podría establecerse en ISO por defecto y reinterpretar los datos. Así que terminas con UTF8 DB -> cliente ISO -> inyectado en el script UTF8 PHP. No es de extrañar por qué está estropeado al final :-)

¿Cómo se sirve el archivo con el juego de caracteres derecho?

header('Content-type: text/html; charset=utf-8') es una solución

archivo .htaccess que contiene AddDefaultCharset UTF-8 es otro

HTML meta-tipo de contenido podría funcionar también, pero siempre es mejor para enviar esta información a través de las cabeceras HTTP.

PD: también tiene que utilizar mb_strlen() porque strlen() en cadenas UTF8 probablemente informará más que la longitud real.

+0

Hay 2 cosas para comprobar, 1) ¿Es su DB UTf-8, 2) ¿Es su tipo de documento UTF-8? – afuzzyllama

+1

Una buena respuesta de 5 lol –

+0

@Maththieu sí, triste ... Supongo que esto es porque la mayoría de las personas trabaja con inglés y no se preocupe por la codificación ;-) – Capsule

1

Si su base de datos es UTF-8, está bien para mysql.

Para su eco, si lo hace en un sitio web, poner esto en la primera página:

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

supongo, su código está en windiws-1251 ya que es :) rusa convertir la cadena de UTF-8:

$str = iconv('windows-1251', 'utf-8', $str); 
2

Si va a enviar una mezcla de datos y no desea especificar UTF-8 utilizando una cabecera php, puede agregar este código hTML en su página:

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