Foros del Web » Programando para Internet » PHP »

Problema con htmlentities

Estas en el tema de Problema con htmlentities en el foro de PHP en Foros del Web. Hola a todos, espero que puedan ayudarme con este problema para mostrar eñes y tíldés. Resulta que tengo una página que empieza así: Código HTML: ...
  #1 (permalink)  
Antiguo 13/10/2011, 12:10
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Problema con htmlentities

Hola a todos, espero que puedan ayudarme con este problema para mostrar eñes y tíldés.

Resulta que tengo una página que empieza así:

Código HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
Lo cual me ha facilitado bastante el uso de tildes en el sitio y no habia tenido problemas hasta que hice una clase en php que retorna texto, que en resumen es esto:

Código PHP:
    class lngx{
        var 
$words;
        var 
$ret;
        function 
lngx(){
            include(
"lang/default.php");
            
$this->words=$words;
        }
        function 
tran($word){
            
$ret=$words;
            
//he acortado ambas funciones para reducir espacio
            
return $ret;
        }
    } 
Luego imprimo el texto algo así:

<?php echo $lang->tran("LANGUAGE"); ?>

Lo cual me da problemas al imprimir caracteres como eñes y tildes, cuando quiero imprimir "español", me devuelve "espa?ol".

Probe cambiando la ultima linea por "return htmlentities($ret)" y me devuevle "espaã±ol".

Alguien tiene alguna pista de que pasa o como solucionarlo?

Gracias!
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #2 (permalink)  
Antiguo 13/10/2011, 12:16
Avatar de Artificium  
Fecha de Ingreso: enero-2011
Mensajes: 492
Antigüedad: 13 años, 3 meses
Puntos: 81
Respuesta: Problema con htmlentities

Deja de usar esas cosas y utilizar UTF-8. Créeme, yo me complicaba igual como tú, pero ahora todo lo hago con UTF-8 y ese tipo de problemas ya están olvidados. Solo investiga al respecto. Suerte!
  #3 (permalink)  
Antiguo 13/10/2011, 12:58
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: Problema con htmlentities

resulta que la cuarta linea de código que puse dice que es UTF-8, pero este caso es especial...

cualquier función que me den para intentar me sirve =)
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #4 (permalink)  
Antiguo 13/10/2011, 13:04
Avatar de Artificium  
Fecha de Ingreso: enero-2011
Mensajes: 492
Antigüedad: 13 años, 3 meses
Puntos: 81
Respuesta: Problema con htmlentities

Si, dice que es UTF-8, pero eso no hace toda la magia. Tienes el archivo codificado en UTF-8? Todos los demás también lo están? tu base de datos si la tienes también está en UTF-8? Si todo está en UTF-8 no tendrás ningún problema de esos. Suerte!
  #5 (permalink)  
Antiguo 13/10/2011, 13:07
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: Problema con htmlentities

ahora que lo dices, el archivo incluido que tiene la clase no tiene codificación, es solo php, quizás el problema esta ahí, como puedo hacer que tenga codificación UTF-8 un archivo php incluido? (sin usar HTML)

+1
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #6 (permalink)  
Antiguo 13/10/2011, 13:27
 
Fecha de Ingreso: febrero-2010
Mensajes: 818
Antigüedad: 14 años, 2 meses
Puntos: 55
Respuesta: Problema con htmlentities

http://cl.php.net/manual/es/function.utf8-encode.php

http://cl.php.net/manual/es/function.utf8-decode.php

usa las funciones de php para comvertir caracteres

$this->words=utf8_encode($words);
  #7 (permalink)  
Antiguo 13/10/2011, 13:33
Avatar de Artificium  
Fecha de Ingreso: enero-2011
Mensajes: 492
Antigüedad: 13 años, 3 meses
Puntos: 81
Respuesta: Problema con htmlentities

Puedes usar un editor como el block de notas o notepad ++ (te recomiendo este), lo abres, uno de los menús es codificación, escoges utf-8 sin boom y guardas.
  #8 (permalink)  
Antiguo 13/10/2011, 14:00
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: Problema con htmlentities

+1

Les cuento aqui en el equipo ya unos 3 han intentado, tambien hemos probado utf8_encode y decode pero sigue sin funcionar, les cuento un poco lo que he descubierto hasta ahora

como explique mas arriba el traspaso de palabras se hace con 3 archivos

1.- spanish.php (Contiene un arreglo de palabras traducidas de ingles a español)
2.- lang.php (Contiene la clase que puse mas arriba y retorna un valor)
3.- index.php (donde se imprime el texto)

la palabra con ñ viene desde el archivo 1

1.- spanish.php = Español
2.- lang.php = Espa?ol
3.- index.php = Espa??ol

si decodifico utf8 y luego lo convierto a html funciona bien

1.- spanish.php = htmlentities(utf8_decode(Español))
2.- lang.php = Español
3.- index.php = Español

sin embargo no debo editar el primer archivo si no el segundo, al editar el segundo de la misma forma falla:

1.- spanish.php = Español;
2.- lang.php = htmlentities(utf8_decode(Español))
3.- index.php = Espa?l

Todo parece indicar que la ñ se va "estropeando" entre un archivo y otro...

Si tienen alguna idea puedo realizar las pruebas que se les ocurran y darles los resultados, solo espero poder tener listo esto para mañana.

Gracias a los que están ayudando!
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #9 (permalink)  
Antiguo 13/10/2011, 14:07
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Problema con htmlentities

Haz hecho lo que te dicen de codificar el archivo como UTF8, ya que el problema parecer que va de ahí, aunque tu especifiques en el <meta> todos tus archivos deben de venir como UTF8, hasta los que solo tengan código PHP.
  #10 (permalink)  
Antiguo 13/10/2011, 15:23
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: Problema con htmlentities

Ok, he guardado los 3 archivos como UTF-8 (con bloc de notas XD)

tenía la esperanza de que se arreglase con eso pero sigue igual voy a intentar usar decodes y encodes aleatorios hasta que salga algo, si alguien se le ocurre algo se lo agradecería.
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #11 (permalink)  
Antiguo 14/10/2011, 05:37
Avatar de Artificium  
Fecha de Ingreso: enero-2011
Mensajes: 492
Antigüedad: 13 años, 3 meses
Puntos: 81
Respuesta: Problema con htmlentities

Y, de donde obtienes ese dato que te causa problemas? de una base de datos?
  #12 (permalink)  
Antiguo 14/10/2011, 07:09
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: Problema con htmlentities

sale de un array que esta en spanish.php que es algo así:

Código PHP:
Ver original
  1. <?php
  2. $words=array(
  3. //Comun
  4. "hello"=>"Hola",
  5. "Company"=>"Compañia",
  6. "Mine site"=>"Mina",
  7. "Enter"=>"Ingresar"
  8. };
  9. ?>

La clase lo único que hace es buscar una palabra coincidente (en este caso "Spanish") y devolver la traducción.

descubrí algo interesante, cuando hago esto:

$_SESSION["lang"]="Spanish";
<?php echo $lang->tran($_SESSION["lang"]); ?>

me devuelve esto: Espa?ol

Pero si pongo la palabra sin usar la sesión, o sea:

<?php echo $lang->tran("Spanish"); ?>

me devuelve el valor como debería ser, o sea "Español".

Pero así no me sirve, por que se supone que el idioma lo elige el usuario solo una vez y debería seguir con ese idioma mientras esta logueado...

Como sea, hoy debo hacer que funcione por las buenas o las malas XD
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #13 (permalink)  
Antiguo 14/10/2011, 07:55
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: Problema con htmlentities

HE DESCUBIERTO EL PROBLEMA!

Y lo publico aquí por que quizás a alguien le pase lo mismo alguna vez

strtolower("Ñoño");

devuelve "??o??o", que era el problema.

mb_strtolower("Ñoño",'UTF8');

devuelve "ñoño", correctamente.

al final el problema no tenia relación con la clase ni nada de lo que explique, era algo que jamás se me habría ocurrido y que omiti en el tema por que lo consideré poco importante, lamento haberles hecho perder el tiempo y gracias a Artificium por su tiempo.
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D

Etiquetas: html, htmlentities
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:51.