none
Caracteres raros al hacer clic en página indexada

    Pregunta

  • Bueno, mi web aparece indexada de la siguiente forma en buscadores: 
    http://www.misitio.com/#!Configuración 

    pero al hacer clic en ese enlace lo convierte a: 
    http://www.misitio.com/#!Configuraci%C3%B3n 

    (No pongo el acortador de urls porque no se vería mi problema).

    Lo que hace es cambiar la vocal acentuada por caracteres raros, lo mismo pasa con los espacios (en este caso remplazándolos por %20). 

    ¿Que debo hacer? Todo mi sitio esta en utf-8. No entiendo porque hace eso. Es más, si buscan ese término internamente en mi sitio, verán como lo muestra sin problemas. 

    • Editado Damian E. _ lunes, 09 de septiembre de 2013 16:08 Spam para buscadores al poner el sitio
    jueves, 13 de diciembre de 2012 18:02

Respuestas

  • Bueno, después de tanto investigar e ir probando diferentes cosas se llegó a la solución. Ahora anda todo: acentos, espacios y los términos que poseen el carácter "+" (mas).

    La cuestión es que deje tal cual tenía la función "encodeURIComponent()" en mi archivo JavaScript para tomar la parte que viene de la URL, o sea codificar.

    Luego, lo que se agrego fue desde PHP una función que trabaja con un patrón de búsqueda con expresión regular. Esta en la siguiente web para el que le pueda interesar: http://mwop.net/blog/133-PHP-decoding-of-Javascript-encodeURIComponent-values.html

    Te agradezco webjose por tu ayuda. 

    Saludos!!!


    • Marcado como respuesta Damian E. _ miércoles, 19 de diciembre de 2012 13:53
    • Editado Damian E. _ lunes, 09 de septiembre de 2013 16:12 Spam para los buscadores al poner mi sitio
    miércoles, 19 de diciembre de 2012 13:52

Todas las respuestas

  • Solo para agregar mas detalle a lo que pasa, les cuento que si por ejemplo ingresan al buscador de google lo siguiente: site:misitio.com (desde Mozilla Firefox) y ahí seleccionan alguna entrada donde aparecen los términos con acento o espacios anda perfecto (mostrando el acento o los espacios según donde se haga clic), pero lo curioso es que no hace lo mismo desde otros navegadores (Chrome, IE, Opera, Safari). Lo he probado en todos estos y en los 4 al hacer clic en alguna entrada les pone los caracteres raros (para los acentos y/o espacios).

    Es como que en el medio hace una conversión de charset, no comprendo.

    ¿Como puede ser que solo ande en Mozilla? Es increíble.

    • Editado Damian E. _ lunes, 09 de septiembre de 2013 16:09 Spam para los buscadores al poner mi sitio
    viernes, 14 de diciembre de 2012 12:44
  • Lo que usted muestra es lo que yo esperaría.  Verá, los URL's no admiten vocales tildadas y otros símbolos.  Para que un URL sea válido, dichos carácteres deben codificarse según el estándar de URL's.  %<código hexadecimal> es el estándar para codificar estos carácteres, así que yo diría que no hay nada malo en esa transformación.

    ¿Cómo codificó usted su sitio web?  ¿ASP.net?  Si es así, usted tiene clases que pueden decodificar el URL si fuera necesario, que parece serlo en su caso.  En webforms suele usarse Server.UrlDecode()/Server.UrlEncode(), mientras que en ASP.net MVC suele usarse la clase HttpUtility.


    Jose R. MCP
    Code Samples

    lunes, 17 de diciembre de 2012 19:12
  • Hola. Dices "los URL's no admiten vocales tildadas y otros símbolos", eso es relativo. Porque como dije en Mozilla mi sitio lo muestra sin problemas y también estuve probando unas cosas.

    Yo tengo por ejemplo la función "encodeURIComponent()" que trabaja desde JavaScript (la utilizo porque sino no me toma términos que posean el carácter "+" (más), como DVD+R, P+F, etc. ya que sino ponía esta función cambiaba el carácter "+" por espacio " ").

    Luego estuve trabajando sin dicha función y probando pude lograr que me tome externamente los términos que estén acentuados y/o con espacios, o sea no me aparecían los caracteres raros (así que ahí puedes ver que las URLs si admiten acentos). ¿Pero cual era el problema al sacar encodeURIComponent()? Que como ya dije más arriba, no me tomaba internamente en el sitio (lo que para mi es peor) los términos que poseen el carácter "+".

    Después buscando veo la función "decodeURIComponent()" que anda perfecto, pero claro ahora donde no funciona es en Mozilla.

    Así que habría que hacer algo como:

     if (navigator.userAgent.indexOf('Firefox') != -1) {

    showHint(encodeURIComponent(b));
     }else{
    showHint(decodeURIComponent(b));
     }

    Volviendo a eso de los acentos te puedes fijar ingresando por ejemplo en Google y poner autenticacion y seleccionar el sitio de la Wikipedia, y ahí tienes la URL con el término acentuado.

    ¿Cómo codificó usted su sitio web? 

    El sitio esta realizado en PHP, MySQL, AJAX, JQUERY. En una archivo JavaScript llamado ajax.js esta la función showHint() que hace todo lo de AJAX.


    • Editado Damian E. _ lunes, 09 de septiembre de 2013 16:10 Spam para los buscadores al poner mi sitio
    martes, 18 de diciembre de 2012 13:26
  • Si Mozilla los acepta entonces Mozilla no sigue el estándar.  En cuanto a su problema, no puedo decirle mucho más excepto que debe siempre codificar a la hora de pasar datos al URL y siempre decodificarlos cuando los va a leer.  Si sigue esta práctica, entonces no debería tener problemas en ningún explorador.  Lo del "+" es normal porque el + es el espacio cuando se codifica un URL.  El problema está en la falta de consistencia:  No debe descodificar algo que nunca codificó.  Por violar esta regla es que usted no recibía bien los datos de "DVD+R", por ejemplo.


    Jose R. MCP
    Code Samples

    martes, 18 de diciembre de 2012 13:58
  • O sea que habría que hacer por ejemplo un encodeURIComponent(string) desde JavaScript y así poder rescatar el término que esta después de "#!" en la URL, esto sería lo de codificar.

    Luego desde PHP usar la función utf8_decode(string)para decodificar el término buscado y poder consultar a la base de datos para después mostrarlo.

    Lo estuve probando pero queda peor que antes.

    Queda mejor no poniendo ningún tipo de función (así funcionan los acentos y espacios), pero esta el tema de como poder mostrar esos términos que poseen el carácter "+". Aunque ahora veo que en IE8 tampoco funciona el tema de los acentos y espacios.


    • Editado Damian E. _ lunes, 09 de septiembre de 2013 16:10 Spam para los buscadores al poner mi sitio
    martes, 18 de diciembre de 2012 16:26
  • El asunto es así:  Cuando usted construya un URL con datos en el QueryString, debe codificarlos.  Si usa JavaScript, use encodeURIComponent() para preparar el URL, pero use decodeURIComponent() para obtener sus datos.  Como habrá notado, es malo decodificar algo si no se ha codificado.  Usted mismo tiene un excelente ejemplo:  DVD+R se decodifica como DVD R incorrectamente porque aún no se ha codificado, pero se descodificará correctamente si antes es codificado.

    No sé de PHP así que no le sé decir acerca de eso exactamente, pero el principio es igual:  Nunca trate de decodificar algo que no fue codificado con anterioridad.


    Jose R. MCP
    Code Samples

    martes, 18 de diciembre de 2012 18:00
  • Bueno, después de tanto investigar e ir probando diferentes cosas se llegó a la solución. Ahora anda todo: acentos, espacios y los términos que poseen el carácter "+" (mas).

    La cuestión es que deje tal cual tenía la función "encodeURIComponent()" en mi archivo JavaScript para tomar la parte que viene de la URL, o sea codificar.

    Luego, lo que se agrego fue desde PHP una función que trabaja con un patrón de búsqueda con expresión regular. Esta en la siguiente web para el que le pueda interesar: http://mwop.net/blog/133-PHP-decoding-of-Javascript-encodeURIComponent-values.html

    Te agradezco webjose por tu ayuda. 

    Saludos!!!


    • Marcado como respuesta Damian E. _ miércoles, 19 de diciembre de 2012 13:53
    • Editado Damian E. _ lunes, 09 de septiembre de 2013 16:12 Spam para los buscadores al poner mi sitio
    miércoles, 19 de diciembre de 2012 13:52
  • Bueno, mi web aparece indexada de la siguiente forma en buscadores: 
    http://www.misitio.com/#!Configuración 

    pero al hacer clic en ese enlace lo convierte a: 
    http://www.misitio/#!Configuraci%C3%B3n 

    (No pongo el acortador de urls porque no se vería mi problema).

    Lo que hace es cambiar la vocal acentuada por caracteres raros, lo mismo pasa con los espacios (en este caso remplazándolos por %20). 

    ¿Que debo hacer? Todo mi sitio esta en utf-8. No entiendo porque hace eso. Es más, si buscan ese término internamente en mi sitio, verán como lo muestra sin problemas. 


    • Editado Damian E. _ lunes, 09 de septiembre de 2013 16:11 Spam para los buscadores al poner mi sitio
    lunes, 09 de septiembre de 2013 16:07