Foros del Web » Programando para Internet » PHP »

Particular error con Codificacion en PHP

Estas en el tema de Particular error con Codificacion en PHP en el foro de PHP en Foros del Web. Hola, tengo un error que aún no puedo terminar de entender, y para esto me voy a valer de una imagen que lo dice todo. ...
  #1 (permalink)  
Antiguo 02/09/2008, 06:21
 
Fecha de Ingreso: abril-2008
Ubicación: en Montevideo
Mensajes: 25
Antigüedad: 16 años, 7 meses
Puntos: 0
Pregunta Particular error con Codificacion en PHP

Hola, tengo un error que aún no puedo terminar de entender, y para esto me voy a valer de una imagen que lo dice todo.

Solamente espero que alguien me pueda dar una explicación de por que sucede esto y de paso ayudar a quien tenga el mismo problema!

El problema se desarrolla así:

En mi trabajo estamos desarrollando un sitio en php y mysql, desde que comenzamos yo me encargué de que los archivos estuvieran correctamente codificados en utf 8 al ser guardados y además que en todos los archivos este la línea

Código:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Además tambien tenemos nuestra base de datos codificada en utf 8.

Hasta aquí todo marcha.
Luego de ya haber trabajado con una gran cantidad de archivos comienzan las diferencias; para empezar he tenido, en más de una ocación, que valerme de las funciones de PHP utf8_encode y utf8_decode, ya que el texto no se imprimía con normalidad, en algunas ocaciones era que el archivo que contenia ese texto no estaba guardado en utf8, pero en otras estaba correctamente guardado y aún así se imprimían mal los caracteres, pues bien, si alguien entiende porque puede pasar esto, agradezco una respuesta. Por otro lado mi problema ahora es otro, veamos la imagen siguiente:



En la imagen se puede ver claramente la diferencia, y la única diferencia, digamos "física" del archivo es la codificación con la que fue guardado, en la imagen 1 (la de la separación y los link dentro del body) el archivo fue guardado con codificación UTF 8 y en la imagen 2, el mismo archivo, fue guardado en ANSI, ambos ejemplos con el Bloc de Notas de Windows .
El hecho es que el archivo de la imagen 2, es el que está correcto, ya que los link a los css se deberían imprimir en el head y no en el body.

Bien, por aquí dejo esta cuestión, espero que quienes estén interesados en aportar información sobre este curioso fallo, por favor responda.

Dejo el código del archivo en cuestión:

Código:
<?php
include ("../modulos/funciones.php");
// PARA PRUEBAS SIN MODIFICAR ORIGINAL
include('./modulos/miguel.php');
// seguridad
if(comprobarLog()) {
    $mostrarInfo = true;
} else {
    $mostrarInfo = false;
}
unset($_SESSION['irA']);
desplegarHead("miFiesta");
?>
<body>
<div id="wrapper">
    <div id="top">
    <a href="/" id="logo"></a>
    </div>
    <div id="cuerpo">
<?php
include("./modulos/fiestas.php");
include("../clases/cajas.php");
include("./modulos/funciones.php");
if($mostrarInfo) {
    menuFiesta('proveedor');
    $mostrarForm = false;
    $error = false;
    if(isset($_GET['comentar']) && $_GET['comentar']) {
        $propImagen = 'src="imagenes/mi_fiestalia/titulos/comentar.png" alt="Comentar" title="Comentar" style="margin-left: 190px;"';
        $mostrarForm = true;
    } else {
        if($_POST['sbt_guardar']) {
            if(!$_POST['hid_servicio'] || !$_POST['comentario']) {
                $propImagen = 'src="imagenes/mi_fiestalia/titulos/comentar.png" alt="Comentar" title="Comentar" style="margin-left: 190px;"';
                $mostrarForm = true;
                $error = true;
            }
        } else {
            $propImagen = 'src="imagenes/mi_fiestalia/titulos/mis_comentarios.png" alt="Mis Comentarios" title="Mis Comentarios"';
        }
    }
?>
        <div id="contenido">
            <h1><img <?php echo $propImagen; ?> /></h1>
            <div class="vinculos_proveedores <?php echo ($mostrarForm) ? 'vinc_comentarios' : ''; ?>">
                <ul>
                    <li><a href="proveedores/favoritos/">Mis proveedores favoritos</a></li>
                    <li><a href="proveedores/">Mis Proveedores</a></li>
                </ul>
            </div>
            <?php
            echo ($error) ? '<p class="msj_error"><strong>Error:</strong> Verifique los datos del formulario</p>' : '';
            if(!$mostrarForm) {
                if($_GET['idProveedor']) {
                    desplegarComentarios($_GET['idProveedor']);
                } else {
                    desplegarComentarios();
                }
            } else {
                if(!$_GET['idServicio'] && !$_POST['hid_servicio']) {
                    $_GET['idServicio'] = NULL;
                }
                $idProv = ($_POST['hid_proveedor'])?$_POST['hid_proveedor']:$_GET['idProveedor'];
                $idServ = ($_POST['hid_servicio'])?$_POST['hid_servicio']:$_GET['idServicio'];
                desplegarFormCom($_SESSION['idUser'],$idProv,$idServ,$error);
            }
            ?>
        </div>
<?php
} else {
    echo '<div id="contenido">';
    echo 'Sitio Restringido!';
    echo '</div>';
    header('Location: http://'.$_SERVER['SERVER_NAME'].'/loger/');
}
?>
    </div>
    <div id="pie">
        <div id="borde_inferior"></div>
    </div>
</div>

</body>
</html>
  #2 (permalink)  
Antiguo 02/09/2008, 06:41
Avatar de lobo_php  
Fecha de Ingreso: noviembre-2007
Ubicación: Cali-Colombia
Mensajes: 1.869
Antigüedad: 17 años
Puntos: 75
Respuesta: Particular error con Codificacion en PHP

la verdad no te entiendo nada ni veo el error.
disculpa, si logro entender despues de varias leidas te digo
__________________
Cabuntu.org - Difundiendo Software Libre en Cali, Colombia
Usuario Linux # 483175
  #3 (permalink)  
Antiguo 02/09/2008, 07:14
 
Fecha de Ingreso: abril-2008
Ubicación: en Montevideo
Mensajes: 25
Antigüedad: 16 años, 7 meses
Puntos: 0
Respuesta: Particular error con Codificacion en PHP

Ok, yo lo releo y no encuentro mejor forma de expresarme, quizás porque es mi error, je, es lógico que yo lo entienda.

Si te fijas en las imágenes, son el mismo archivo abierto con firefox 3.0 y examinado con firebug. Uno guardado en UTF 8 (el primero) y el otro guardado en ANSI con bloc de notas de windows.

No hay niguna modificación al código del archivo, solamente la codificación conque fue guardado, y la diferencia se ve en la imagen.

Archivo en UTF 8:

Hay un margen superior que no está especificado en CSS y que no lo pude arreglar por este medio
Los link a las hojas de estilo se encuentran en el <body> y en el código son parte de la función desplegarHead() que es la que se encarga de imprimir la etiqueta head y los link a las hojas de estilo.

Archivo ANSI

No hay margen superior distinto del especificado con CSS
Los link a las horas de estilo se imprimen en la etiqueta <head> correctamente

Conclusión:

Logicamente yo quiero utilizar UTF 8, ya que así lo vengo haciendo desde que comenzamos, porque facilita el no tener que codificar a mano los caracteres especiales. Con este particular archivo no lo puedo hacer ya que la codificación me cambia estéticamente el resultado. Ese es el problema.

Gracias por la respuesta y espero que entiendas el problema, aunque no espero una solución pronta, ya que porlomenos yo no encuentro ninguna explicación lógica.

Saludos

Última edición por Miguelso23; 02/09/2008 a las 07:43 Razón: Olvidé poner en donde radicaba el problema je, :) Gracias
  #4 (permalink)  
Antiguo 02/09/2008, 07:39
Avatar de lobo_php  
Fecha de Ingreso: noviembre-2007
Ubicación: Cali-Colombia
Mensajes: 1.869
Antigüedad: 17 años
Puntos: 75
Respuesta: Particular error con Codificacion en PHP

mmm entendi men, pero creo yo, (la verdad no se pero creo) que el ´problema sera con lo de la codificacion simplemente dejalo en la codificacion que mas te guste. sse que no es la respuesta que esperas pero es todo lo que puedo opinar, las codificaciones no son mi fuerte. o dejalo en ansi si te parece y para las vocales con tilde o la ñ usa codigo es facil aprender mira:
á = &aacute;
é = &eacute;
í = &iacute;
ó = &oacute;
ú = &uacute;
ñ = &ntilde;
si las qeres en mayusculas simplemente despues del & pone la vocal en mayuscula o la n en mayuscula para la Ñ
__________________
Cabuntu.org - Difundiendo Software Libre en Cali, Colombia
Usuario Linux # 483175
  #5 (permalink)  
Antiguo 02/09/2008, 09:27
 
Fecha de Ingreso: abril-2008
Ubicación: en Montevideo
Mensajes: 25
Antigüedad: 16 años, 7 meses
Puntos: 0
Respuesta: Particular error con Codificacion en PHP

Gracias por tu respuesta tan pronta.

Cita:
..dejalo en ansi si te parece y para las vocales con tilde o la ñ usa codigo
La solución que me planteas es justamente lo que no quiero hacer, aunque por ahora parece ser que no me quedaría otra opción.

Gracias, seguiré buscando!

Saludos
  #6 (permalink)  
Antiguo 02/09/2008, 09:59
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Particular error con Codificacion en PHP

Hola Miguelso23,

Revisa esta FAQ: http://www.forosdelweb.com/2023067-post176.html

Saludos.
  #7 (permalink)  
Antiguo 02/09/2008, 12:19
 
Fecha de Ingreso: agosto-2008
Mensajes: 21
Antigüedad: 16 años, 2 meses
Puntos: 3
Respuesta: Particular error con Codificacion en PHP

Cita:
Iniciado por Miguelso23 Ver Mensaje
Hola, tengo un error que aún no puedo terminar de entender, y para esto me voy a valer de una imagen que lo dice todo.

Solamente espero que alguien me pueda dar una explicación de por que sucede esto y de paso ayudar a quien tenga el mismo problema!

El problema se desarrolla así:

En mi trabajo estamos desarrollando un sitio en php y mysql, desde que comenzamos yo me encargué de que los archivos estuvieran correctamente codificados en utf 8 al ser guardados y además que en todos los archivos este la línea

Código:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Además tambien tenemos nuestra base de datos codificada en utf 8.

Hasta aquí todo marcha.
Luego de ya haber trabajado con una gran cantidad de archivos comienzan las diferencias; para empezar he tenido, en más de una ocación, que valerme de las funciones de PHP utf8_encode y utf8_decode, ya que el texto no se imprimía con normalidad, en algunas ocaciones era que el archivo que contenia ese texto no estaba guardado en utf8, pero en otras estaba correctamente guardado y aún así se imprimían mal los caracteres, pues bien, si alguien entiende porque puede pasar esto, agradezco una respuesta. Por otro lado mi problema ahora es otro, veamos la imagen siguiente:



En la imagen se puede ver claramente la diferencia, y la única diferencia, digamos "física" del archivo es la codificación con la que fue guardado, en la imagen 1 (la de la separación y los link dentro del body) el archivo fue guardado con codificación UTF 8 y en la imagen 2, el mismo archivo, fue guardado en ANSI, ambos ejemplos con el Bloc de Notas de Windows .
El hecho es que el archivo de la imagen 2, es el que está correcto, ya que los link a los css se deberían imprimir en el head y no en el body.

Bien, por aquí dejo esta cuestión, espero que quienes estén interesados en aportar información sobre este curioso fallo, por favor responda.

Dejo el código del archivo en cuestión:

Código:
<?php
include ("../modulos/funciones.php");
// PARA PRUEBAS SIN MODIFICAR ORIGINAL
include('./modulos/miguel.php');
// seguridad
if(comprobarLog()) {
    $mostrarInfo = true;
} else {
    $mostrarInfo = false;
}
unset($_SESSION['irA']);
desplegarHead("miFiesta");
?>
<body>
<div id="wrapper">
    <div id="top">
    <a href="/" id="logo"></a>
    </div>
    <div id="cuerpo">
<?php
include("./modulos/fiestas.php");
include("../clases/cajas.php");
include("./modulos/funciones.php");
if($mostrarInfo) {
    menuFiesta('proveedor');
    $mostrarForm = false;
    $error = false;
    if(isset($_GET['comentar']) && $_GET['comentar']) {
        $propImagen = 'src="imagenes/mi_fiestalia/titulos/comentar.png" alt="Comentar" title="Comentar" style="margin-left: 190px;"';
        $mostrarForm = true;
    } else {
        if($_POST['sbt_guardar']) {
            if(!$_POST['hid_servicio'] || !$_POST['comentario']) {
                $propImagen = 'src="imagenes/mi_fiestalia/titulos/comentar.png" alt="Comentar" title="Comentar" style="margin-left: 190px;"';
                $mostrarForm = true;
                $error = true;
            }
        } else {
            $propImagen = 'src="imagenes/mi_fiestalia/titulos/mis_comentarios.png" alt="Mis Comentarios" title="Mis Comentarios"';
        }
    }
?>
        <div id="contenido">
            <h1><img <?php echo $propImagen; ?> /></h1>
            <div class="vinculos_proveedores <?php echo ($mostrarForm) ? 'vinc_comentarios' : ''; ?>">
                <ul>
                    <li><a href="proveedores/favoritos/">Mis proveedores favoritos</a></li>
                    <li><a href="proveedores/">Mis Proveedores</a></li>
                </ul>
            </div>
            <?php
            echo ($error) ? '<p class="msj_error"><strong>Error:</strong> Verifique los datos del formulario</p>' : '';
            if(!$mostrarForm) {
                if($_GET['idProveedor']) {
                    desplegarComentarios($_GET['idProveedor']);
                } else {
                    desplegarComentarios();
                }
            } else {
                if(!$_GET['idServicio'] && !$_POST['hid_servicio']) {
                    $_GET['idServicio'] = NULL;
                }
                $idProv = ($_POST['hid_proveedor'])?$_POST['hid_proveedor']:$_GET['idProveedor'];
                $idServ = ($_POST['hid_servicio'])?$_POST['hid_servicio']:$_GET['idServicio'];
                desplegarFormCom($_SESSION['idUser'],$idProv,$idServ,$error);
            }
            ?>
        </div>
<?php
} else {
    echo '<div id="contenido">';
    echo 'Sitio Restringido!';
    echo '</div>';
    header('Location: http://'.$_SERVER['SERVER_NAME'].'/loger/');
}
?>
    </div>
    <div id="pie">
        <div id="borde_inferior"></div>
    </div>
</div>

</body>
</html>
Yo he tenido el mismo problema en uno de los servidores que he trabajado. Tenia unas paginas sin "encodificacion" y se veian correcto en un servidor y incorrecto en el otro.

Esto, para un proyecto de 2 paginas puede ser mas facil buscar los vocales con accentos y reemplazarlos con sus valores encodificados. Pero para uno grande, esto puede ser una pesadilla litteral.


La solucion es averiguar >>

>> APACHE
>> PHP

Como estan configurados para acceptar los diferentes formatos de encoding.
  #8 (permalink)  
Antiguo 02/09/2008, 12:40
 
Fecha de Ingreso: abril-2008
Ubicación: en Montevideo
Mensajes: 25
Antigüedad: 16 años, 7 meses
Puntos: 0
Esetoy descargando un editor y lo voy a probar.

Muchas gracias GatorV, luego te cuento mis resultados...

GENIAL! Nunca pensé que un post seguido de una pregunta, y una simple respuesta podrían ser tan útiles.

Ahí mismo estaba mi problema.

Gracias FajitaMaster por el interés, por ahora lo he solucionado. Igual gracias.

Gracias GatorV, muchas gracias

Alguien sabe donde podría aprender más sobre codificación?

Encontré que para que todo funcione bien con utf 8 en un sitio web, debe estar, tanto PHP, com Apache, como las bases de datos, incluidas tablas, ingreso de datos y demás, incluso hay que setear a utf 8 cada html, cada css, hasta el .htaccess.

Por otro lado, según mi experiencia he dado conque es absolutamente necesario además de todo lo anterior, guardar los archivos con esa codificación.

Lo que me gustaría saber es como interpretan los servidores, toda esta configuración, porque no es lo mismo un servidor en linux que uno en windows.

Bueno, dejo esa interrogante y para el que sepa o le interese, si sabe de algo que me aclare aún más las dudas, gracias.

Saludos a todo el foro

Última edición por GatorV; 02/09/2008 a las 13:51
  #9 (permalink)  
Antiguo 02/09/2008, 13:36
Avatar de lobo_php  
Fecha de Ingreso: noviembre-2007
Ubicación: Cali-Colombia
Mensajes: 1.869
Antigüedad: 17 años
Puntos: 75
Respuesta: Particular error con Codificacion en PHP

trabaja desde linux siempre te va a quedar esa codificacion
__________________
Cabuntu.org - Difundiendo Software Libre en Cali, Colombia
Usuario Linux # 483175
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 14:11.