Problema con caracteres especiales.

Hola como estan…

Tengo problema en un ef_fijo de un formulario para mostrar una cadena compuesta por: (10 Años - 2Días).
El dato lo recibo de un array y bien asi como lo describo, pero no se porque al asignar datos al formulario

$form->set_datos($dato[0]);

este se visualiza de esta manera: (10 Años - 2 Días ) pero solo me surge el problema con este dato,
y no es la codificacion de caracteres del firefox (ya estube verificando eso!).

Es solo php, al hacer un echo($dato[0][‘edad’]); recibo bien la cadena. adjunto imagenes.

Si surgen algunas ideas, agradesco mucho.

saludos.


Captura de pantalla de 2012-09-04 12:01:04.png

Captura de pantalla de 2012-09-04 12:01:04.png

Captura de pantalla de 2012-09-04 12:01:48.png

Captura de pantalla de 2012-09-04 12:01:48.png

Hola Josefina,

te hago una consulta, que version de PHP estas utilizando?.

Puede que sea la funcion que usamos para evitar el XSS, en otro hilo Emilio justo trajo a colacion que se comporta distinto ahora.

Saludos

Hola Richard…

PHP Version 5.3.10

saludos…

Hola

Eso depende del recorrido que siga la variable $dato[0][‘edad’] para llegar desde el php al interprete del navegador

Casos

  1. si pones en un php plano

<? echo $dato[0]['edad']; ?> te aparecerá "Año" si el encoding del navegador es Europeo Occidental, en otro caso te aparecerá un rombo u otro simbolo

2.- si pones

<? echo htmlentities($dato[0]['edad']); ?> te aparecerá Año independiente del encoding del navegador

3.- si haces
htmlentities($dato[0][‘edad’])
y lo pasas via javascript te aparecerá Año
puesto que javascript no interpreta los &ntilde

4.- si por alguna razón o proceso haces un doble htmlentities te aparecerá Año en el navegador

Habría que ver cual es el recorrido que sigue para ver donde está la falla.

Emilio

Hola Gente,

muy buena tu acotacion Emilio !, ojala Josefina nos pueda dar mas info para ver que esta sucediendo.

No creo que esten utilizando el modo ajax, asi que en ppio descartaria la via javascript, lo que si parece seguro es que el dato que recibe el formulario ya viene de alguna manera codificado.

Lo ideal seria contar con el fuente de la pagina generada.

Saludos

Hola como estan gente…

Mil disculpas las demoras.
En verdad no se como expresar mi problema, pero en estas lineas voy a escribir todo el recorrido de mis datos,
y de la manera que se llega a mostrar.

  1. en el firefox tengo codificacion de caracteres Occidental (ISO 8859-1) y por casualidad solamente este dato me muestra mal,
    como exprece anteriormente, por ejemplo tengo paginados de los cuadros donde me dice la pagina y el numero, y no tengo problema con el
    acento en la “a”.

  2. como optengo este dato?, de la siguiente manera, en un dao consultas tengo el siguiente metodo:

function calcula_edad($fecha_nac){

	$fechaInicio = $fecha_nac;
	$fechaActual = date('Y-m-d');
	 
	$fecha1 = explode("-",$fechaInicio);
	$fecha2 = explode("-",$fechaActual);

	$diaActual = $fecha2[2];
	$mesActual = $fecha2[1];
	$anioActual = $fecha2[0];
	$diaInicio = $fecha1[2];
	$mesInicio = $fecha1[1];
	$anioInicio = $fecha1[0];

	$b = 0;
	$mes = $mesInicio-1;
	if($mes==2){
		if(($anioActual%4==0 && $anioActual%100!=0) || $anioActual%400==0){
			$b = 29;
		}else{
			$b = 28;
		}
	}
	elseif($mes<=7){
		if($mes==0){
			$b = 31;
		}
		elseif($mes%2==0){
			$b = 30;
		}
		else{
			$b = 31;
		}
	}elseif($mes>7){
		if($mes%2==0){
			$b = 31;
		}
		else{
			$b = 30;
		}
	}
	if(($anioInicio>$anioActual) || ($anioInicio==$anioActual && $mesInicio>$mesActual) ||
		($anioInicio==$anioActual && $mesInicio == $mesActual && $diaInicio>$diaActual)){
		toba::notificacion()->info("<FONT FACE='arial' SIZE=3><b>La fecha de nacimiento debe ser menor a la fecha actual</b></FONT>");
	}else{
		if($mesInicio <= $mesActual){
			$anios = $anioActual - $anioInicio;
		if($diaInicio <= $diaActual){
			$meses = $mesActual - $mesInicio;
			$dies = $diaActual - $diaInicio;
		}else{
		if($mesActual == $mesInicio){
			$anios = $anios - 1;
		}
			$meses = ($mesActual - $mesInicio - 1 + 12) % 12;
			$dies = $b-($diaInicio-$diaActual);
		}
		}else{
			$anios = $anioActual - $anioInicio - 1;
		if($diaInicio > $diaActual){
			$meses = $mesActual - $mesInicio -1 +12;
			$dies = $b - ($diaInicio-$diaActual);
		}else{
			$meses = $mesActual - $mesInicio + 12;
			$dies = $diaActual - $diaInicio;
		}
		}
		$year = utf8_encode(' A&ntilde;os, ');
		$month = ' Meses ';
		$day = utf8_encode(' Dias ');
		// AQUI IMPRIMES LOS RESULTADOS
		if(($anios !=0) && ($meses !=0) && ($dies !=0)){
			$edad = $anios  . $year . $meses . $month . $dies .  $day ;
		}
		if(($anios ==0) && ($meses !=0) && ($dies !=0)){
			$edad =   $meses . $month .  $dies .  $day ;
		}
		if(($anios ==0) && ($meses ==0) && ($dies !=0)){
			$edad =   $dies .  $day ;
		}
		
		if(($anios !=0) && ($meses !=0) && ($dies ==0)){
			$edad =  $anios .  $year .  $meses .  $month;
		}
		if(($anios !=0) && ($meses ==0) && ($dies ==0)){
			$edad =  $anios  . $year;
		}
		if(($anios !=0) && ($meses ==0) && ($dies !=0)){
			$edad =  $anios .  $year .  $dies . $day ;
		}
	return $edad;
	}	 
}

/////////////////////////
En el conf_formulario tengo el siguiente metodo:

function conf__formulario(consultorio_ei_formulario $form)
{
$edad=dao_consultas::calcula_edad($fecha_nacimiento);
$mostrar_fecha = date(“d/m/Y”, strtotime($fecha_nacimiento));
$this->s__datos[0][‘fecha_edad’] = ‘(’. $mostrar_fecha . ') '. $edad;

            ei_arbol($this->s__datos); //EN ESTA PARTE RECIBO BIEN EL DATO.
	$form->set_datos($this->s__datos[0]);
    }

/////////////
En un momento pense que estube errando en concatenar el $year con el numero de year, pero eh probado en el conf_form por separado y el error persiste.

Ademas probe las sugerencias que me pasaron e igual persiste el error.

saludos.

Hola

Probá cambiando
$year = utf8_encode(’ Años, ');

por
$year = utf8_encode(’ Años, ');

Aparte, porque necesitas el utf8_encode?

Emilio