PDA

Ver la Versión Completa : Caracteres raritos (Mmmpppfff!! ¿esto que es?)


papulo
03-10-2006, 12:15:43
<?xml version='1.0' encoding='ISO-8859-1' ?>

<TECH_DATA>
<M>
<TECH_ID>1</TECH_ID>
<TECH_NAME>Voltaje</TECH_NAME>
<TECH_ID>2</TECH_ID>
<TECH_NAME>Kw</TECH_NAME>
<TECH_ID>3</TECH_ID>
<TECH_NAME>Tipo tapa del.</TECH_NAME>
<TECH_ID>5</TECH_ID>
<TECH_NAME>N� dientes</TECH_NAME>
<TECH_ID>7</TECH_ID>
<TECH_NAME>Rotaci�n</TECH_NAME>
<TECH_ID>8</TECH_ID>
<TECH_NAME>Agujeros</TECH_NAME>
</M>
<A>
<TECH_ID>50</TECH_ID>
<TECH_NAME>Voltaje</TECH_NAME>
<TECH_ID>51</TECH_ID>
<TECH_NAME>Amperios</TECH_NAME>
<TECH_ID>52</TECH_ID>
<TECH_NAME>Tipo</TECH_NAME>
<TECH_ID>53</TECH_ID>
<TECH_NAME>Pos. tensor</TECH_NAME>
<TECH_ID>56</TECH_ID>
<TECH_NAME>Rotaci�n</TECH_NAME>
<TECH_ID>57</TECH_ID>
<TECH_NAME>Agujeros</TECH_NAME>
</A>
<C>
<TECH_ID>100</TECH_ID>
<TECH_NAME>Voltaje</TECH_NAME>
<TECH_ID>101</TECH_ID>
<TECH_NAME>Kw</TECH_NAME>
<TECH_ID>105</TECH_ID>
<TECH_NAME>Rotaci�n</TECH_NAME>
<TECH_ID>106</TECH_ID>
<TECH_NAME>Fijaci�n</TECH_NAME>
<TECH_ID>111</TECH_ID>
<TECH_NAME>Amperios</TECH_NAME>
</C>
</TECH_DATA>


¿Por que me salen esos rombitos con un simbolo de interrogación dentro?

No tengo ni idea de que son, por que salen y por extensión, no se que leches preguntarle al google.

H E L P ! !

Asias por la antención :p

Ñuño Martínez
03-10-2006, 12:28:02
Simple: el tipo de letra que tienes instalado no incluye esos caracteres o no está correctamente configurada. Normalmente se trata de los caracteres con acento, ¿a que sí?. Deberías mirar la configuración UNICODE (http://es.wikipedia.org/wiki/Unicode) del sistema operativo y del navegador y, si es necesario, deberás instalar nuevos tipos de letra.

dec
03-10-2006, 12:40:28
Hola,

Asegúrate de que la codificación de caracteres que utilizas en el archivo coincide con la codificación de caracteres que da como salida el Servidor, y, por otro lado, con la etiqueta raíz del documento XML en este caso, o sea, siguiendo con tu ejemplo podría ser más o menos así:


<?php
header("Content-Type: text/html; charset=ISO-8859-1");
?>
<?xml version='1.0' encoding='ISO-8859-1' ?>


Empero, también podrías ahorrarte dicha cabecera (en todos los archivos) si añadieras al ".htaccess" del directorio oportuno (acaso el raíz de tu aplicación) una instrucción como la siguiente, siguiendo con tu ejemplo:


AddDefaultCharset ISO-8859-1


Sin embargo, no sé si aún así no tendrías que plantearte (para evitar problemas con esos caracteres, que acaso tuvieras que "identificar" mediante entidades HTML, ya sabes, &aacute, &eacute, etc.), digo, no sé si sería mejor que te plantearas utilizar la codificación UTF-8, puesto que de este modo podrías olvidarte de entidades HTML para caracteres "especiales", dado que estos están contemplados ya en UTF-8.

Creo, si no me equivoco, que ISO-8859-1 también contempla el tipo de caracteres de que hablamos, pero, UTF-8 va más allá y podría ayudarte, por ejemplo, a la hora de "localizar" la aplicación en diversos lenguajes, como el árabe, el chino, entre otros.

Haz pruebas a ver qué tal. Puedes encontrar información sobre esto en los buscadores si tratas de buscar por "codificación de caracteres", "codificación UTF-8", "comparativa UTF-8", etc., etc.

Creo que el reciente Hilo "tildes caprichosos (http://www.clubdelphi.com/foros/showthread.php?t=36052)" podrá proporcionarte más información o alguna que otra idea puesto que al cabo se trata de lo mismo. ;)

Ojo, que la base de datos (al menos MySQL) admite también que se especifique una codificación de caracteres determianda, que habría también de estar "de acuerdo" con la que damos a la hora de dar salida a un documento desde el Servidor, esto es, siempre que sea precisa la intervención de la base de datos, como me parece que es en este caso.

papulo
03-10-2006, 13:07:00
Esta es el archivo PHP principal y el único sitio donde hay una cabecera.


<?php
include "libreria_web.php";

header('Content-type: text/xml; charset="utf-8"');

$ref_num3 = CleanUpSpaces($ref_num);

$limit_results = 30; //Numero máximo de resultados devueltos.

echo "<?xml version='1.0' encoding='ISO-8859-1' ?> \n";

switch ($request_param)
{
case "TECH_INFO": echo TECH_INFO($ref_num3,$id_sup);break; //REF_NUM,ID_SUP
case "SEARCH_REF": echo SEARCH_REF($ref_num3,$limit_results);break; //REF_NUM
case "CROSS_REF": echo CROSS_REF($ref_num3,$id_sup);break; //REF_NUM,ID_SUP
case "TECH_DATA": echo TECH_DATA($lang);break; //LANG
case "SPARE_DATA": echo SPARE_DATA($lang);break; //LANG
default: echo "INCORRECT REQUEST PARAMETER";
}

?>

Lo de las cabeceras lo tengo que estudiar a conciencia (pobrecito de mi que pensé que acabada la carrera dejaría de estudiar...)

Me voy a leer el hilo.

"Graciases" por ahora y sigo al tanto.

dec
03-10-2006, 13:18:13
Hola,

Nota que la cabecera HTTP que envías con PHP e indica la codificación del archivo, esto es, la codificación que indiques ahí, ha de coincidir con la que indicas en la "cabecera" del archivo XML, esto es, no como pones arriba, la primera en "UTF-8" y la segunda en "ISO".

Piensa también que el archivo que contiene el propio código PHP (por resumir) ha de guardarse, propiamente, usando la codificación adecuada, es decir, ha de coincidir con la de las "cabeceras" mencionadas antes. No estoy seguro para ISO (no sé si basta con guardar el fichero codificado en "ANSI"), pero, para UTF-8 la codificación en que se guarda el fichero ha de ser esa: UTF-8.

Por último, como comenté arriba, en la base de datos, al menos los de tipo "string", "texto", han de guardarse también con la correspondiente codificación. A lo menos las cuatro cosas creo que son necesarias para que no te encuentres con problemas de caracteres extraños como los que te has topado.

Resumiendo:

1º Fichero del Script PHP guardado en la codificación elegida (UTF-8 creo que se recomienda, al menos a mí, y no sólo a mí, me va bien)

2º Cabecera HTTP mediante PHP (con la función "header") o mediante el ".htacess", o mediante la clave correspondiente en el archivo de configuración de Apache, digo, que indique la codificación "que perseguimos".

3º Meta-etiqueta HTML o XML, en nuestro caso, que indique a su vez la codificación de caracteres correspondiente.

4º Datos (texto) en la base de datos codificados, igualmente, de manera que coincida con la codificación indicada anteriormente de las maneras que comentamos.

Y, bueno... creo que eso es todo... aunque es un tema que en cierto modo se me escapa, no nos vamos a engañar. Creo que debes hacer unas cuantas pruebas y darás con el tema, que ya verás como no es tan "lioso" como yo, lamenteblamente, puedo explicarlo, ni mucho menos. ;)

papulo
03-10-2006, 13:21:52
Me acabo de leer el hilo y me he quedado igual... JAJAJAJA!! Que pez estoy todavía. Seguiré leyendo con la calma.

Saludooox.

papulo
03-10-2006, 13:26:05
//CAMBIANDO
header('Content-type: text/xml; charset="UTF-8"');
//POR
header('Content-type: text/xml; charset="ISO-8859-1"');
Se ha arreglado del todo todito.

Ahora, me tengo que poner con el tema de las cabeceras, porque parece importante e interesante.

Gracias por la HELP!

dec
03-10-2006, 13:27:41
Hola,

Bueno. El caso es que en el Hilo que mencioné más arriba, aun cuando en el caso de que se trata los caracteres "extraños" aparecen en un correo electrónico, o sea, en su cuerpo, lo cierto es que el "concepto" es el mismo: ha de servirse un documento con una determinada codificación y la misma ha de indicarse en las cabeceras del correo (no confundir con las cabeceras HTTP, pero, en cierto modo sirven para algo similar) e incluso en la meta-etiqueta HTML del correo, si es que este fuera en formato HTML, claro.

Al compañero pareció funcionarle bien, es decir, adiós a los caracteres "extraños". :D


Ahora, me tengo que poner con el tema de las cabeceras, porque parece importante e interesante.


Está bien, pero, piensa que en este caso que nos ocupa las cabeceras HTTP (que puedes enviar mediante la función "header" de PHP) son una parte más del rompecabezas, esto es, las cabeceras HTTP dan mucho más juego, y, podría decirse, no es que sirvan para esto de que hablamos, sino que, también sirven para esto. ;)

Es decir, ten en cuenta que las cabeceras HTTP son eso, cabeceras HTTP, no son exclusivas de PHP, ni pertenecen a este lenguaje, sino que pueden usarse y se usan en otros lenguajes y para otras circunstancias: las cabeceras HTTP se pueden "estudiar" en la especificación del protocolo HTTP: la función "header" de PHP sirve para enviar estas, pero, no es cuestión de estudiar el uso de esta función, que también, por supuesto.

Si buscas por ahí (je, je, je) encontrarás la traducción al español (y otros idiomas) de la especificación del protocolo HTTP: es ahí donde debes parar mientes, puesto que lo demás (su uso en PHP, por ejemplo) vendrá dado por añadidura, si puede decirse así. :)