martes, 7 de agosto de 2012

No se ven correctamente los acentos en PHP

Bueno... este si fue un problema que me hizo doler la cabeza.

Se trataba de un php que contenía caracteres que llegaban vía GET con acentos.
Probé múltiples soluciones.

Curiosamente, con esta cabecera, que se supone interpreta los caracteres en español, NO LO LOGRE:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

Lo que funcionó fue poner esta cabecera dentro del HEAD:
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />

Allí se las dejo.

6 comentarios:

  1. Y si aún así se ve mal, utiliza la siguiente función de php:

    $string = htmlentities($string);

    Dónde $string es la cadena que tiene el acento.

    ResponderEliminar
    Respuestas
    1. Muchas gracias, no probé el primero al leer tu comentario.. pero esa función que colocaste me funciono (Y)

      Eliminar
  2. Algo que me falto decir. Perdonen.

    Si después de colocar la cabecera siguen apareciendo mal los acentos,
    deben cambiar la CODIFICACIÓN del propio documento que muestra el resultado.
    En mi caso era una plantilla HTML que era jalada por el PHP.
    Fui al editor que uso, Notepad ++, abrí el HTML, di click en el botón Codificación, del menú superior, y elegí: Codificar en UTF-8. Y grabé.

    Y todo funcionó perfecto.

    ResponderEliminar
  3. Ok. Las palabras se imprimían bien en la página. Pero era un formulario.
    Y al mandar los datos, las palabras con acentos se volvían locas.

    La solución. Un códigito php que recibe la palabra con los caracteres raros y la corrige:

    $nombre = $_GET['nombre'];

    $caracteres_raros = array("á", "é", "í", "ó", "ú", "ñ", "Á", "É", "Ã", "Í“", "Íš", "Í‘");
    $caracteres_normales = array("á", "é", "í", "ó", "ú", "ñ", "Á", "É", "Í", "Ó", "Ú", "Ñ",);
    $nombre = str_replace($caracteres_raros, $caracteres_normales, $nombre);

    Funcionó bien.

    ResponderEliminar
  4. Algo más :)
    Al recibir una cadena con tildes vía GET en un PHP, estas se imprimen incorrectamente.

    Para resolverlo:
    Recoger el valor que viene por GET y aplicarle utf8_decode.
    Por ejemplo:

    $nombre = $_GET['nombre'];
    $nombre = utf8_decode($nombre );
    echo $nombre ;

    ResponderEliminar
  5. También podemos definir que la salida de MYSQL no venga UTF-8:

    mysqli_set_charset($link, "utf8");

    ResponderEliminar