Bienvenido a datoweb.com!! En este foro podrás encontrar ayuda sobre diseño y desarrollo web en general. Si quieres formar parte de esta comunidad para pedir ayuda o colaborar ayudando a otros usuarios del foro solo tienes que registrarte desde el siguiente enlace: Registrarse en el Foro

Titulo url amigable me quitas letras

No se como hacerlo, le hado mil vueltas pero no encuentro la solución a este problema a ver si algunos de ustedes me podeis echar una mano.
la cuestion es que cuando subo un post o lo edito se sube bien todo pero en base de datos los acentos directamente me los quita con la url amigalbe y me quita la letras:
en index me lo hace bien

ahora en ver post(titulo) tambien me lo hace bien:

pero el problema esta en la url:

en base de datos no me pega o acutliza lo que corresponde la letra a sin tildes, mi web ests en :
<meta charset="UTF-8">
y mi base de datos
utf8_spanish_ci

mi codigo para subir o actualizar:
if(!isset($_POST['idpost'])){
//Insertar Post
$accion_adduser = sprintf("INSERT INTO web_posts (titulo, categoria, mensaje, imagen, autor, seo) VALUES (%s, %s, %s, %s, %s, %s)",
formatearcadena($_POST['titulo'],'text'),
formatearcadena($_POST['categoria'],'int'),
formatearcadena($_POST['mensaje'],'text'),
formatearcadena($nombre,'text'),
formatearcadena($_SESSION['iduser'],'int'),
formatearcadena(urls_amigables($_POST['titulo']),'text'));
$consulta_adduser = mysqli_query($conexion,$accion_adduser) or die(mysqli_error());

$idpost=mysqli_insert_id($conexion);
} else {

$accion_editarpost = sprintf("UPDATE web_posts SET titulo=%s,categoria=%s,mensaje=%s,imagen=%s,seo=%s WHERE id=%s",
formatearcadena($_POST['titulo'],'text'),
formatearcadena($_POST['categoria'],'int'),
formatearcadena($_POST['mensaje'],'text'),
formatearcadena($_SESSION['imagenes'],'text'),
formatearcadena(urls_amigables($_POST['titulo']),'text'),
formatearcadena($_POST['idpost'],'int'));
$consulta_editarpost = mysqli_query($conexion,$accion_editarpost) or die(mysqli_error());

$idpost=$_POST['idpost'];	
}

//Actualizar Post
$accion_seo = sprintf("UPDATE web_posts SET seo=%s WHERE id=$idpost",
formatearcadena($idpost.'-'.urls_amigables($_POST['titulo']),'text'));
$consulta_seo = mysqli_query($conexion,$accion_seo) or die(mysqli_error());

echo $dato[0].'post/'.$idpost.'-'.urls_amigables($_POST['titulo']);
?>
yo creo que lo tengo todo bien pero no tengo ni idea que pasa
y la fucntion url amigable:
//FUNCION URL AMIGABLE
function urls_amigables($url) {
// Tranformamos todo a minusculas
$url = strtolower($url);
//Rememplazamos caracteres especiales latinos
$find = array('á', 'é', 'í', 'ó', 'ú', 'ñ');
$repl = array('a', 'e', 'i', 'o', 'u', 'n');
$url = str_replace($find, $repl, $url);
// Añadimos los guiones
$find = array(' ', '&', '\r\n', '\n', '+'); 
$url = str_replace($find, '-', $url);
// Eliminamos y Reemplazamos demás caracteres especiales
$find = array('/[^a-z0-9\-<>]/', '/[\-]+/', '/<[^>]*>/');
$repl = array('', '-', '');
$url = preg_replace($find, $repl, $url);
return $url;
}


Editado
1
Puntos
1243
Visitas
10
Resp
Por Dannus hace 86 meses
Avanzado
Respuesta #1
hola es raro por que acabo de probar la función y va correcta incluso si miras ese pos aquí http://d4.datoweb.com/post/7-llega-a-la-familia-de-graficas-nvidia-la-nueva-titan-x también funciona bien.

si quieres prueba esto:

1 comenta el location que tienes en la función ajax para que no te regireccione.

2 donde tienes esto
$accion_adduser = sprintf("INSERT INTO web_posts (titulo, categoria, mensaje, imagen, autor, seo) VALUES (%s, %s, %s, %s, %s, %s)",
formatearcadena($_POST['titulo'],'text'),
formatearcadena($_POST['categoria'],'int'),
formatearcadena($_POST['mensaje'],'text'),
formatearcadena($nombre,'text'),
formatearcadena($_SESSION['iduser'],'int'),
formatearcadena(urls_amigables($_POST['titulo']),'text'));
$consulta_adduser = mysqli_query($conexion,$accion_adduser) or die(mysqli_error());
pon esto
$accion_adduser = sprintf("INSERT INTO web_posts (titulo, categoria, mensaje, imagen, autor, seo) VALUES (%s, %s, %s, %s, %s, %s)",
formatearcadena($_POST['titulo'],'text'),
formatearcadena($_POST['categoria'],'int'),
formatearcadena($_POST['mensaje'],'text'),
formatearcadena($nombre,'text'),
formatearcadena($_SESSION['iduser'],'int'),
formatearcadena(urls_amigables($_POST['titulo']),'text'));
$consulta_adduser = mysqli_query($conexion,$accion_adduser) or die(mysqli_error());

echo formatearcadena(urls_amigables($_POST['titulo']),'text');
exit;
3 inserta un post y mira la network en la parte que dice response

si ves la url de manera correcta quiere decir que llega bien pero no se inserta el la DB de manera correcta, prueba y nos cuentas a ver que podemos hacer

salu2
0
Puntos
Por alber hace 86 meses
Administrador
Respuesta #2
hice la prueba y me sale esto en en network 'preba-de-post-con-tlde' cuando puse prúeba de post con tílde,
es muy raro pero no encuentro el fallo
0
Puntos
Por Dannus hace 86 meses
Avanzado
Respuesta #3
vale ya tenemos un poco mas de info, ahora cambia el echo por este
echo urls_amigables($_POST['titulo']);
de esta manera descartamos que sea por la función formatear cadena
0
Puntos
Por alber hace 86 meses
Administrador
Respuesta #4
vale creo que ya lo tengo, prueba esto
echo formatearcadena(urls_amigables(utf8_decode($_POST['titulo'])),'text');
;)
0
Puntos
Por alber hace 86 meses
Administrador
Respuesta #5
lo hice de las 2 manera pero me sale esto 'post-de-prueba-con-tlde' se come la í y no lo se de donde viene :)
0
Puntos
Por Dannus hace 86 meses
Avanzado
Respuesta #6
pues mira que es raro, te dejo otra prueba
$titulo=utf8_encode(utf8_decode($_POST['titulo']));
echo formatearcadena(urls_amigables($titulo),'text');
usa las 2 lineas
0
Puntos
Por alber hace 86 meses
Administrador
Respuesta #7
a lo mejor puede ser en la base de datos,porque el titulo me sale asi Ya estó aqui familia de gráficas nvidia la nueva titan x
0
Puntos
Por Dannus hace 86 meses
Avanzado
Respuesta #8
es por la codificación de caracteres a no ser que estés probando los ejemplos en la parte donde actualizas entonces claro no funciona.

mire te dejo mis prácticas de y comento lo que funciona y lo que no así tienes una idea:
<?php 


//FUNCION URL AMIGABLE
function urls_amigables($url) {
// Tranformamos todo a minusculas
$url = strtolower($url);
//Rememplazamos caracteres especiales latinos
$find = array('á', 'é', 'í', 'ó', 'ú', 'ñ');
$repl = array('a', 'e', 'i', 'o', 'u', 'n');
$url = str_replace($find, $repl, $url);
// Añadimos los guiones
$find = array(' ', '&', '\r\n', '\n', '+'); 
$url = str_replace($find, '-', $url);
// Eliminamos y Reemplazamos demás caracteres especiales
$find = array('/[^a-z0-9\-<>]/', '/[\-]+/', '/<[^>]*>/');
$repl = array('', '-', '');
$url = preg_replace($find, $repl, $url);
return $url;
}



$cadena='llega a la família de gráficas de nvidia';


//Esto funciona
$titulo=utf8_encode(utf8_decode($cadena));
echo urls_amigables($titulo);


//Esto NO funciona
$titulo=utf8_encode(($cadena));
echo urls_amigables($titulo);


 ?>
como ves la cosa esta en la codificación de caracteres, tienes que solucionar eso en los ficheros no en la base de datos
0
Puntos
Por alber hace 86 meses
Administrador
Respuesta #9
ya lo he conseguido mas o menos pero he cambiado la funcion un poco.
<?php 
//FUNCION URL AMIGABLE
function urls_amigables($url) {
$url= utf8_decode($url);
// Tranformamos todo a minusculas
$url = strtolower($url);
//Rememplazamos caracteres especiales latinos
$find = 'áéíóúñ';
$repl = 'aeioun';
$url = strtr($url, utf8_decode($find), $repl);
// Añadimos los guiones
$find = array(' ', '&', '\r\n', '\n', '+'); 
$url = str_replace($find, '-', $url);
// Eliminamos y Reemplazamos demás caracteres especiales
$find = array('/[^a-z0-9\-<>]/', '/[\-]+/', '/<[^>]*>/');
$repl = array('', '-', '');
$url = preg_replace($find, $repl, $url);
return $url;
}




$cadena='llegá a la família de gráficas de nvidia';


//Esto funciona
echo urls_amigables($cadena);



 ?>
ya me funciono :)
1
Puntos
Por Dannus hace 86 meses
Avanzado
Respuesta #10
perfecto cierro el tema entonces, para cualquier otra duda abran otro ;)
0
Puntos
Por alber hace 86 meses
Administrador
Compartir en facebook
Compartir en twitter
Compartir
Para comentar Inicia sesión o Registrate