Foros del Web » Creando para Internet » HTML »

Problema al validar un sitio

Estas en el tema de Problema al validar un sitio en el foro de HTML en Foros del Web. Hola amigos, estoy creando una web y he decidido crearla con la codificación utf-8, para no tener problemas con carácteres especiales. El problema me ha ...
  #1 (permalink)  
Antiguo 08/07/2011, 04:35
 
Fecha de Ingreso: abril-2009
Mensajes: 233
Antigüedad: 14 años, 11 meses
Puntos: 5
Problema al validar un sitio

Hola amigos, estoy creando una web y he decidido crearla con la codificación utf-8, para no tener problemas con carácteres especiales.

El problema me ha venido al intentar validad el documento en el validator.w3c que me arroja el siguiente error:

Sorry, I am unable to validate this document because on line 228 it contained one or more bytes that I cannot interpret as utf-8 (in other words, the bytes found are not valid values in the specified Character Encoding). Please check both the content of the file and the character encoding indication.

The error was: utf8 "\xE1" does not map to Unicode


Álguien sabe como puedo solucionar esto?

Gracias!!
  #2 (permalink)  
Antiguo 08/07/2011, 07:06
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 14 años, 11 meses
Puntos: 1485
Respuesta: Problema al validar un sitio

buenas,
fijate que el mismo mensaje te indica cuál es el problema: tienes una secuencia que no esta correctamente codificada en utf-8. por tanto, la solución obvia es asegurarte de codificar el contenido. si estas utilizando un editor, asegurate que al guardar el documento tenga la codificación utf-8. si se trata de un contenido generado en el servidor, asegurate de pasar el contenido por alguna función para codificarlo a utf-8 antes de imprimirlo.

__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 08/07/2011, 07:21
 
Fecha de Ingreso: abril-2009
Mensajes: 233
Antigüedad: 14 años, 11 meses
Puntos: 5
Respuesta: Problema al validar un sitio

Hola! el editor de texto lo guarda en utf-8 y en el documento he puesto antes de comenzar el html lo siguiente:

Código HTML:
<?php
   header('Content-Type: text/html; charset=utf-8');
?> 
Además de probar con el debido meta de utf-8...

Los datos de la base de datos están guardados también en utf-8...así que no se porqué me da el error...
  #4 (permalink)  
Antiguo 08/07/2011, 11:00
Avatar de gilbertopineda  
Fecha de Ingreso: julio-2011
Ubicación: Santiago de cali, Colombia
Mensajes: 10
Antigüedad: 12 años, 8 meses
Puntos: 4
Respuesta: Problema al validar un sitio

Hola arquidea, y que hay con la línea 228 que te indican en el mensaje de error?
  #5 (permalink)  
Antiguo 08/07/2011, 11:34
 
Fecha de Ingreso: abril-2009
Mensajes: 233
Antigüedad: 14 años, 11 meses
Puntos: 5
Respuesta: Problema al validar un sitio

Buenas, pues en esa linea tengo un function:

Código HTML:
function puntos($s)
{
$s= str_replace('"','', $s);
$s= str_replace(':','', $s);
$s= str_replace('.','', $s);
$s= str_replace(',','', $s);
$s= str_replace(';','', $s);
$s= str_replace(' ','-', $s);
return $s;
}
Se os ocurre algo?
  #6 (permalink)  
Antiguo 08/07/2011, 11:40
Avatar de gilbertopineda  
Fecha de Ingreso: julio-2011
Ubicación: Santiago de cali, Colombia
Mensajes: 10
Antigüedad: 12 años, 8 meses
Puntos: 4
Respuesta: Problema al validar un sitio

@arquidea tienes que ver la línea 228 al momento de ser presentada en el navegador. Revisa desde tu navegador el Código fuente de la página... por ahí en el menú Ver seguramente encontrarás la opción. Basandome en este tipo de cosas he corregido algunos errores de validación así que podemos ver si podemos hacer lo mismo contigo.
  #7 (permalink)  
Antiguo 08/07/2011, 16:23
Avatar de Tecna  
Fecha de Ingreso: enero-2010
Mensajes: 291
Antigüedad: 14 años, 2 meses
Puntos: 45
Respuesta: Problema al validar un sitio

Buenas,

el caracter hexadecimal E1 es el caracter reservado para el separador de registros y es uno de los caracteres especiales no imprimibles, por defecto en los ficheros de texto y bases de datos es el salto de linea, así que tendrás que eliminarlo de la cadena o sustituirlo por \n . Los literales de cadena no se pueden escribir en dos líneas. Comprueba el resultado de la función.
  #8 (permalink)  
Antiguo 08/07/2011, 16:45
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 14 años, 11 meses
Puntos: 1485
Respuesta: Problema al validar un sitio

según como lo veo, 0xE1 es el caracter á en iso-8859-1. en el caso de utf-8, 0xE1 parece ser el comienzo de un byte para un caracter con multiples bytes. por tanto, la secuencia de byte que le sigue a 0xE1 en el documento no es válida. de ahí que estoy casi seguro que el contenido no esta codificado en utf-8. hay que identificar de donde viene ese contenido, si es parte del documento o si viene de la base de datos.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #9 (permalink)  
Antiguo 09/07/2011, 06:37
 
Fecha de Ingreso: abril-2009
Mensajes: 233
Antigüedad: 14 años, 11 meses
Puntos: 5
Respuesta: Problema al validar un sitio

Saliendo del tema un poco, hay una cosa que no entiendo, por ejemplo esta conocida página:
Código HTML:
http://www.pisos.com/
, utiliza ISO
Código HTML:
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
Pero sin embargo los acentos salen tal cual en el código fuente, sin el código que acompaña al ISO, sabéis porque?
  #10 (permalink)  
Antiguo 09/07/2011, 08:48
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 14 años, 11 meses
Puntos: 1485
Respuesta: Problema al validar un sitio

¿a qué te refieres con sin el código que acompaña al ISO? no comprendo lo que quieres decir.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #11 (permalink)  
Antiguo 09/07/2011, 09:23
 
Fecha de Ingreso: abril-2009
Mensajes: 233
Antigüedad: 14 años, 11 meses
Puntos: 5
Respuesta: Problema al validar un sitio

Perdona debería haberme explicado mejor. En la página de pisos que he mencionado antes los acentos salen así: á, en vez de como deberían salir al tener charset=iso-8859-1, por ejemplo: a = &aacute;
  #12 (permalink)  
Antiguo 09/07/2011, 10:12
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 14 años, 11 meses
Puntos: 1485
Respuesta: Problema al validar un sitio

no, eso es un mito o una supocisión errónea. deberías informarte más en relación al tema de los charset. en resumen, un charset es un conjunto de caracteres que estan organizados y pareados a un valor. cada charset es distinto de otro o bien puede ser basado en otro. el punto es al crear un documento, debemos indicar a que conjunto de caracteres se debe adherir. en el caso de iso-8859-1, éste esta compuesto por 256 codepoint donde los primeros 128 (0x00-0x7F) tiene cierta compatibilidad con el charset ascii. el resto son caracteres latinos que se utilizan en sistemas de escrituras de europa occidental. si analizas el conjunto de iso-8859-1, notarás que muchos de los caracteres que se utilizan en español estan incluidos. por eso, al utilizar iso-8859-1 no es necesario utilizar las entidades equivalentes. ponlo de esta manera, las entidades se deben utilizar en dos circunstancias: si el carácter a representar no existe en el charset a emplear, o si nuestro teclado no admite dicho carácter. si en última se desea omitir todas las entidades posible, entonces debes codificar el contenido en un charset que incluya todos los caracteres empleados en el documento. si por ejemplo el documento esta compuesto por caracteres del griego, español y árabe, entonces lo más adecuado sería utilizar el charset unicode. o bien como posiblemente muchos le llamarían, utf-8.

una observación. no entiendo por qué hay gentes/autores que venden la idea de que si vas a utilizar literalmente caracteres del español, entonces debes usar utf-8 para que se muestren bien. en el ejemplo del sitio web que señalas, ya pudistes comprobar que no es así.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 09/07/2011 a las 10:20
  #13 (permalink)  
Antiguo 09/07/2011, 10:57
 
Fecha de Ingreso: abril-2009
Mensajes: 233
Antigüedad: 14 años, 11 meses
Puntos: 5
Respuesta: Problema al validar un sitio

He estado leyendo el enlace que me has pasado y te pido disculpas porque la verdad todo lo que me has dicho no lo sabía.

Entonces supuestamente poniendo el meta charset=iso-8859-1, y guardando mi documento en iso latino 1, debería poner en el editor de texto por ejemplo á y el navegador debería mostralo igual no? no haría falta utilizar el utf-8?

Lo he probado como te acabo de decir pero sigue sin mostralo bien en el navegador...
Se me escapa algo verdad?
  #14 (permalink)  
Antiguo 09/07/2011, 11:49
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 14 años, 11 meses
Puntos: 1485
Respuesta: Problema al validar un sitio

nótese es que solo una opción. bien puedes utilizar utf-8 o iso-8859-1. si lo cambias a iso-8859-1, es de mi entender que debes cambiar todo a dicho charset o bien debes recodificar el contenido si este viene en otro charset. lo mejor es evitar la recodificación y hacer que todos los recursos (base de datos u otras fuentes) trabajen en la misma codificación. adicionalmente, tenga en cuenta que no solo basta con cambiar la codificación en <meta>, sino que también debes asegurarse de guardar el contenido en dicha codificación. si aún no le funciona, debes revisar si el servidor esta enviado algún charset en el header. ya que cuando este está presente, el navegador ignora el charset indicado en <meta>. sobre la base de datos no te puedo ayudar porque mi conocimiento no alcanza. yo tu haría los siguientes pasos para identificar donde realmente esta el problema:
  • decidir que charset utilizar.
  • crear un documento sin contenido de recursos externos.
  • en dicho documento escribe algún texto con los caracteres que tienes problema.
  • comprobar el documento e identificar si el servidor envia algún charset en el header.
  • si envia algún charset, determinar si es el mismo que has decidido utilizar. si no es el mismo entonces debes buscar la manera de configurar el servidor o sobreescribir el charset con alguna función del lenguaje servidor. ejemplo, header en php.
  • si aún así no anda bien, revisa que el navegador este cofigurado para detectar automaticamente el charset. si bien recuerdo, hay navegadores que si le indicas un charset en particular sin detección automatica, entonces el navegador no cambia de charset independientemente de lo indicado en <meta> o el header http.
  • luego ve agregando contenido de la base de datos. ya aquí no se cómo se maneja. pero si se muestra mal, entonces evidentemente el contenido de la base de datos no esta en la misma codificación que has decidido utilizar en el primer paso.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #15 (permalink)  
Antiguo 09/07/2011, 12:00
 
Fecha de Ingreso: abril-2009
Mensajes: 233
Antigüedad: 14 años, 11 meses
Puntos: 5
Respuesta: Problema al validar un sitio

Realmente ya he comprobado eso, y todo funciona perfecto con UTF-8, base de datos, guardar el archivo, el meta, el header...el problema es exclusivo del validador w3c con la función que indiqué al principio de este tema...bueno miraré a ver porque da el error con esa función a ver si averiguo algo...
  #16 (permalink)  
Antiguo 09/07/2011, 12:11
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 14 años, 11 meses
Puntos: 1485
Respuesta: Problema al validar un sitio

¿podrías indicar la web?
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #17 (permalink)  
Antiguo 09/07/2011, 12:22
 
Fecha de Ingreso: abril-2009
Mensajes: 233
Antigüedad: 14 años, 11 meses
Puntos: 5
Respuesta: Problema al validar un sitio

Si claro, faltaría más!

Código HTML:
www.motosyocasion.com
Está en fase de montaje todavía, por eso quería solucionar primero el tema del charset.

Por ejemplo esta otra página del mismo dominio no tiene la función de php "function" y el validador la acepta perfectamente con utf-8:

Código HTML:
http://motosyocasion.com/vender-moto.php
  #18 (permalink)  
Antiguo 09/07/2011, 12:42
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 14 años, 11 meses
Puntos: 1485
Respuesta: Problema al validar un sitio

Cita:
Por ejemplo esta otra página del mismo dominio no tiene la función de php "function" y el validador la acepta perfectamente con utf-8
no entiendo lo que quieres decir con ese argumento. si es que lo comprendi bien, entiendase que el validador no lee código php ni el codigo fuente original de los sitios generados con lenguaje servidor. el validador lo único que ve es el codigo html generado.

respecto al sitio con el problema, ¿de donde viene el siguiente fragmento de código, en especial lo marcado en negrita?
Código:
<div class="ocasion">
<div class="imagen">
<img width="175" height="132" alt=" PREDATOR 500 de segunda mano C�ceres" src="http://www.motosyocasion.com/archivos/fotosmotos/piaggio-zip-50-4t-Ciclomotor-1310086308.jpg"></div>

<h3><a href="http://www.cochesyocasion.com/coches-de-segunda-mano/polaris-predator 500--segunda-mano-c�ceres-11">POLARIS PREDATOR 500 </a></h3>

<span><strong>Quad</strong></span> <span><strong>500 cc</strong></span> <span class="espacioadora">|</span> <span>km: 1900</span><br>
<span>C�ceres</span> <span class="espacioadora">|</span> <span>Precio:</span> <span class="precio">0 €</span>
</div>
estoy casi seguro que viene de la base de datos. entonces es el problema es la base de datos. al menos esa información no esta codificada en utf-8.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #19 (permalink)  
Antiguo 09/07/2011, 12:53
 
Fecha de Ingreso: abril-2009
Mensajes: 233
Antigüedad: 14 años, 11 meses
Puntos: 5
Respuesta: Problema al validar un sitio

La base de datos y todas sus tablas están con utf8_general_ci, lo acabo de comprobar.
  #20 (permalink)  
Antiguo 09/07/2011, 13:08
 
Fecha de Ingreso: abril-2009
Mensajes: 233
Antigüedad: 14 años, 11 meses
Puntos: 5
Respuesta: Problema al validar un sitio

Ya está solucionado, era problema de indicarle a la base de datos que expulsase los datos con la codificación UTF-8.

Solo faltaba añadir esto justo antes de hacer la llamada a la base de datos:

Código PHP:
mysql_query("SET NAMES UTF8"); 
Dejo el enlace de la página que me ha ayudado a solucionarlo, ya que lo explican de forma detallada y seguro que le sirve a alguien en mi situación.

http://programadorasp.com/codificaci...e-datos-mysql/

Gracias por tu ayuda y paciencia @zerokilled!
  #21 (permalink)  
Antiguo 11/07/2011, 11:08
Avatar de Tecna  
Fecha de Ingreso: enero-2010
Mensajes: 291
Antigüedad: 14 años, 2 meses
Puntos: 45
Respuesta: Problema al validar un sitio

Buenas,

mysql usa varias codificaciones independientes, todo lo referente a la administración está siempre en utf-8 para que cualquier usuario de cualquier pais pueda crear bases de datos con los nombres de las tablas y demás en su propio idioma. Por otro lado está la codificación que se asigna al crear la base, tabla o lo que sea y que afecta a la forma de guardar los datos, pero también está la codificación que se usa en las conexiones con los clientes, que afecta a lo forma en que se muestran los datos en las consultas y que si no se ha especificado en el servidor lo devuelve en la codificación que use el cliente. Eso probablemente es lo estaba ocurriendo en este caso que si la petición se hizo en ISO-8859 el servidor intenta devolverlo en esa codificación y como utf-8 usa más bytes para la codificación y es de longitud variable, la conversión resulta errorea y estaba intentando imprimir el caracter de fin de registro, por eso daba ese error, además de mostrar mal otros caracteres como los acentuados. Con SET NAMES cambias las 3 variables que controlan la codificación de las conexiones pero tienes que hacerlo en cada conexión, se puede añadir en el fichero de opciones de configuración --default-character-set= y así siempre funcionará sin tener que añadir nada más, también se puede poner la variable character_set_results a NULL para que el servidor no haga conversiones de codificación por su cuenta.

Por otro lado dices que tienes la base con la codificación utf8_general_ci que es una codificación antigua y tiene limitaciones y menos exactitud en las comparaciones, puedes usar utf8_unicode_ci o mejor usar utf8_spanish_ci o utf8_spanish2_ci para que tenga en cuenta las ñ y las ch a la hora de ordenar los datos o enviar las consultas.

Yo creo que siempre es mejor usar utf-8 como codificación porque es capaz de representar correctamente muchos más caracteres, no sólo gráficos de muchos idiomas, también de formato como saltos de línea, fin de fichero y tiene compatibilidad con ASCII en el que las primeras posiciones eran para caracteres de control, todo eso también lo tiene ISO-8859 pero tiene menos posibilidad de crecer y representar más caracteres por eso son más localizados, enfocados a determinados idiomas, como la ISO-8859-1 para europa occidental y la ISO-8859-15 ampliación que se hizo para el euro. utf-8 quiere ser más universal, por eso es de las pocas codificaciones admitidas por el estandar Unicode, que no es exactamente lo mismo, ya que Unicode es el estandar y engloba también a utf-16 y a utf-32 y a otras futuras que pudieran incluir siempre que puedan representar todos los caracteres y algún requisito más. La codificación de caracteres es un tema muy complejo, a veces lo que en local se ve bien en el servidor no, o al revés, o depende del navegador, o como el caso que se comentaba con bases de datos y da menos problemas usar utf-8 porque está mas extendido y hay más gente en el mundo que lo usa, no solo en hardware ya que muchas veces no tenemos acceso a la configuracción de servidor, también en software, declarando siempre todas las cabeceras sin dejar lugar a la improvisación del navegador. Es la manera de asegurarse que más gente lo verá correctamente, incluidos programas, traductores por ejemplo, sobre todo si están hechos por angloparlantes.
  #22 (permalink)  
Antiguo 12/07/2011, 15:16
 
Fecha de Ingreso: abril-2009
Mensajes: 233
Antigüedad: 14 años, 11 meses
Puntos: 5
Respuesta: Problema al validar un sitio

Gracias por la respuesta, no sabía lo de general_ci, a partir de ahora lo haré como dices, con utf8_spanish_ci.

Saludos!

Etiquetas: Ninguno
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 16:55.