Foros del Web » Programando para Internet » PHP »

UTF-8 url amigables, problema

Estas en el tema de UTF-8 url amigables, problema en el foro de PHP en Foros del Web. Hola a todos tengo el siguiente problema tengo un formulario para insertar datos con su correspondiente campo para hacer la url amigable sin acentos, espacios, ...
  #1 (permalink)  
Antiguo 24/09/2010, 04:51
 
Fecha de Ingreso: octubre-2008
Mensajes: 168
Antigüedad: 15 años
Puntos: 2
UTF-8 url amigables, problema

Hola a todos tengo el siguiente problema tengo un formulario para insertar datos con su correspondiente campo para hacer la url amigable sin acentos, espacios, mayúsculas etc. la web está en UTF-8 y también la base de datos

Pero no me hace la función cuando hay acentos, simplemente me pone un guión como si fuera un espacio en blanco.
La función que tengo es esta

Código:
function getUrlAmigable($s){

    $s = strtolower($s);
    $s = ereg_replace("[áàâãäª@]","a",$s);
    $s = ereg_replace("[éèêë]","e",$s);
    $s = ereg_replace("[íìîï]","i",$s);
    $s = ereg_replace("[óòôõºö]","o",$s);
    $s = ereg_replace("[úùûü]","u",$s);
    $s = ereg_replace("[ç]","c",$s);
    $s = ereg_replace("[ñ]","n",$s);
    $s = preg_replace( "/[^a-zA-Z0-9\-]/", "-", $s );
    $s = preg_replace( array("`[^a-z0-9]`i","`[-]+`") , "-", $s);

    return trim($s, '-');
}

if(isset($_GET['titulo'])){
    $url = getUrlAmigable(utf8_decode($_GET['titulo']));
    echo $url;exit;
}
En ISO-8859-1 no da problemas pero el resto de la web se ve mal.
  #2 (permalink)  
Antiguo 24/09/2010, 05:20
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años
Puntos: 331
Respuesta: UTF-8 url amigables, problema

¿Por qué haces utf8_decode de $titulo?:

Código PHP:
function getUrlAmigable($s){

    
$s strtolower($s);
    
$s ereg_replace("[áàâãäª@]","a",$s);
    
$s ereg_replace("[éèêë]","e",$s);
    
$s ereg_replace("[íìîï]","i",$s);
    
$s ereg_replace("[óòôõºö]","o",$s);
    
$s ereg_replace("[úùûü]","u",$s);
    
$s ereg_replace("[ç]","c",$s);
    
$s ereg_replace("[ñ]","n",$s);
    
$s preg_replace"/[^a-zA-Z0-9\-]/""-"$s );
    
$s preg_replace( array("`[^a-z0-9]`i","`[-]+`") , "-"$s);

    return 
trim($s'-');
}


    echo 
$url getUrlAmigable("áé89íóú´__;<>//\""); 
  #3 (permalink)  
Antiguo 24/09/2010, 06:14
 
Fecha de Ingreso: octubre-2008
Mensajes: 168
Antigüedad: 15 años
Puntos: 2
Respuesta: UTF-8 url amigables, problema

Hola es una función que he pillado por allí pero he probado quitando el utf8_decode
y sale
ó
ao

con el utf8_decode

sale -

$titulo es la variable del form campo titulo hacerlo SEO

Última edición por jordi45; 24/09/2010 a las 06:21
  #4 (permalink)  
Antiguo 24/09/2010, 07:25
 
Fecha de Ingreso: octubre-2008
Mensajes: 168
Antigüedad: 15 años
Puntos: 2
Respuesta: UTF-8 url amigables, problema

El ejemplo lo he cogido de aquí

http://craftyman.net/urls-seo-con-php-y-jquery/
  #5 (permalink)  
Antiguo 24/09/2010, 08:07
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años
Puntos: 331
Respuesta: UTF-8 url amigables, problema

Sigo pensando que el problema está en el decode inicial:

Código PHP:
<?php

ini_set
("display_errors"0);

    function 
getUrlAmigable($s){

    
$s strtolower($s);
    
$s ereg_replace("[áàâãäª@]","a",$s);
    
$s ereg_replace("[éèêë]","e",$s);
    
$s ereg_replace("[íìîï]","i",$s);
    
$s ereg_replace("[óòôõºö]","o",$s);
    
$s ereg_replace("[úùûü]","u",$s);
    
$s ereg_replace("[ç]","c",$s);
    
$s ereg_replace("[ñ]","n",$s);
  
$s preg_replace"/[^a-zA-Z0-9\-]/""-"$s );
  
$s preg_replace( array("`[^a-z0-9]`i","`[-]+`") , "-"$s);

    return 
trim($s"-");
}

    echo 
"<h3>Cadena: áé89íóú´__;<>//\"</h3>";
    echo 
"<h3>Decode: ".utf8_decode("áé89íóú´__;<>//\"")."</h3>";
    echo 
"<h3>Tu funcion sin decode: ".getUrlAmigable("áé89íóú´__;<>//\"")."</h3>";
    echo 
"<h3>Tu funcion con decode: ".getUrlAmigable(utf8_decode("áé89íóú´__;<>//\""))."</h3>";
    
?>
Devuelve:

Cadena: áé89íóú´__;<>//"
Decode: ?9?´__;<>//"
Tu funcion sin decode: ae89iou
Tu funcion con decode: 9


Además recuerda que ereg() está desaconsejada, a ver si ahora marcha, saludos.
  #6 (permalink)  
Antiguo 24/09/2010, 08:32
 
Fecha de Ingreso: octubre-2008
Mensajes: 168
Antigüedad: 15 años
Puntos: 2
Respuesta: UTF-8 url amigables, problema

No marcha

si pongo la página en ISO

Warning: ini_set() has been disabled for security reasons /panel.php on line 249
Cadena: áé89íóú´__;<>//"
Decode: ?9?´__;<>//"
Tu funcion sin decode: ae89iou
Tu funcion con decode: 9

Si la pongo en UTF-8
Warning: ini_set() has been disabled for security reasons /panel.php on line 249

Cadena: áé89íóú´__;<>//"
Decode: ��89���__;<>//"
Tu funcion sin decode: aaae89aiaoaoao
Tu funcion con decode: 89-o
  #7 (permalink)  
Antiguo 24/09/2010, 08:49
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años
Puntos: 331
Respuesta: UTF-8 url amigables, problema

Cuando la pones en ISO el resultado es el esperado:


Código:
Warning: ini_set() has been disabled for security reasons /panel.php on line 249
Cadena: áé89íóú´__;<>//"
Decode: ?9?´__;<>//"
Tu funcion sin decode: ae89iou
Tu funcion con decode: 9
El warning es porque tu hosting no te permite deshabilitar los errores quita la primera línea.

Observa que en el resultado de "Tu funcion sin decode" la salida es la esperada, a saber, ha quitado los caracteres problemáticos.
Tal vez no he pillado bien lo que necesitas, pero las expresiones regulares de la función van bien.

Si vas a trabajar con esta función, la página ha de estar siempre en UTF 8.

Espero que te sirva la respuesta, si no, explícamelo con un poco más de detalle lo que quieres hacer finalmente. Un saludo
  #8 (permalink)  
Antiguo 24/09/2010, 08:54
 
Fecha de Ingreso: octubre-2008
Mensajes: 168
Antigüedad: 15 años
Puntos: 2
Respuesta: UTF-8 url amigables, problema

El problema que tengo es que esta función no funciona en UTF-8

sale

esto

Cadena: áé89íóú´__;<>//"
Decode: ��89���__;<>//"
Tu funcion sin decode: aaae89aiaoaoao
Tu funcion con decode: 89-o

Quiero hacer una url SEO sin más
  #9 (permalink)  
Antiguo 24/09/2010, 08:59
 
Fecha de Ingreso: octubre-2008
Mensajes: 168
Antigüedad: 15 años
Puntos: 2
Respuesta: UTF-8 url amigables, problema

He cogido la función y la he puesto aparte en otra página codificada en ISO, he puesto un include en la página del form en UTF-8 y funciona, pero tiene un fallo las mayúsculas con acento no las convierte en minúsculas ni tampoco las Ñ.
  #10 (permalink)  
Antiguo 24/09/2010, 09:57
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años
Puntos: 331
Respuesta: UTF-8 url amigables, problema

ok, eso se arregla agregando las expresiones regulares o modificando las que ya tienes dentro de la función.

Código PHP:
<?php
$s 
"ABCDEÑñ";

    
$s ereg_replace("[Á]","a",$s);
    
$s ereg_replace("[É]","e",$s);
    
$s ereg_replace("[Í]","i",$s);
    
$s ereg_replace("[Ñ]","N",$s); 
    
$s ereg_replace("[ñ]","n",$s); 
    
    echo 
$s;
?>
Te vas acercando a la solución, saludos
  #11 (permalink)  
Antiguo 24/09/2010, 10:01
Avatar de suap  
Fecha de Ingreso: julio-2009
Ubicación: La taberna de Moe's
Mensajes: 54
Antigüedad: 14 años, 3 meses
Puntos: 4
Respuesta: UTF-8 url amigables, problema

has tratado de verificar si el explorador que estas usando para probar tu programa funciona correctamente o es compatible con lo que quieres desplegar?
  #12 (permalink)  
Antiguo 24/09/2010, 10:28
 
Fecha de Ingreso: octubre-2008
Mensajes: 168
Antigüedad: 15 años
Puntos: 2
Respuesta: UTF-8 url amigables, problema

Literalmente me he vuelto loco y lo he probado y funciona PERFECTAMENTE lo convierte todo sólo cuando la página está en ISO y se le quita el utf8 decode.
Sólo con ejemplos sin usar el ajax, porque si uso ajax también falla.

Cuando está en utf8 sólo cambia las mayúsculas a minúsculas y hace los espacios en blanco lo demás nada.
No es problema del navegador, eso seguro.

No entiendo nada me estoy volviendo majara con las codificaciones


  #13 (permalink)  
Antiguo 25/09/2010, 03:48
 
Fecha de Ingreso: octubre-2008
Mensajes: 168
Antigüedad: 15 años
Puntos: 2
Respuesta: UTF-8 url amigables, problema

Solucionado esta función no funciona en UTF8 y alguna otra que he visto en esta web tampoco. me ha funcionado esta en UTF 8 perfectamente

http://www.forosdelweb.com/f18/probl...igable-712330/

Etiquetas: amigables, url, utf
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 12:31.