Convertir texto a URL SEO sin caracteres especiales

  • Autor Autor grunst3r
  • Fecha de inicio Fecha de inicio
grunst3r

grunst3r

Beta
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Una de las tareas más comunes en el desarrollo de Web optimizada para los buscadores es el generar los URL en formato SEO, es decir que contengan el titulo, pero que no contengan tildes, comas, espacios en blanco. Esta vez les presentamos la forma de convertir los títulos en URLs optimizadas para los buscadores.


La funcion va de la siguiente manera:

PHP:
function seo_url($texto){
$spacer = "-";
$texto = trim($texto);
$texto = strtolower($texto);
$texto = trim(ereg_replace("[^ A-Za-z0-9_]", " ", $texto));
$texto = ereg_replace("[ \t\n\r]+", "-", $texto);
$texto = str_replace(" ", $spacer, $texto);
$texto = ereg_replace("[ -]+", "-",$texto);
return $texto;
}
Enlace eliminado

Esta funcion se encarga de borrar los saltos de línea, tabuladores y finalmente reemplazamos los espacios en blanco por un separador que en nuestro caso hemos asignado al guion (-).

Para hacer uso de esta función simplemente le pasamos como parámetro el texto que deseamos convertir a URL. Podemos ver un ejemplo de uso en el siguiente código.

PHP:
$title = "MoFuse Versión movil de tu Web en Español";
echo $title;
// MoFuse Versión movil de tu Web en Español
echo seo_url($title);
// mofuse-versi-n-movil-de-tu-web-en-espa-ol
Un ejemplo practico de de uso de esta función es el momento de guardar información en nuestra base de datos, por ejemplo si tenemos un tabla donde guardamos los datos de nuestros productos, la forma de insertar esta información incluyendo el URL sería de la forma:

PHP:
$name = $_POST['name'];
$content = $_POST['content'];
$url = seo_url($_POST['name']);
$sql = "INSERT INTO products (name, content, url)
VALUES ('".$name."', '".$content."', '".$url."')";
mysql_query($sql);
Obviamente esta es una función básica que aunque cumple con los requisitos de crear URL amigables, se podría mejorar con la posibilidad de convertir la vocales tildadas o con diéresis en vocales normales, la cual con un poco de trabajo se puede implementar.
este script es simple alguna mejora por favor por los comentarios xD y para los NOVATOS espero que les sea de mucha ayuda este manual pequeño 😉
 
Sería bueno agregar que se quitaran en las urls los artículos lexicales y nexos, como El, La, Los, de, y, etc, y dejar solo las palabras claves. En mi caso veo mas limpia una url llamada casas-lujo-habana.html que una llamada casas-de-lujo-en-la-habana.html ,,,
 
@manuelspirit Si tienes razon reprogramar el script é indicar que emprima solo de mayores de 3 caracteres. Lograr reducir URL con palabras claves
 
para hacer una url amigable prueben con esto;

Test;
PHP:
$title = "MoFuse Versión movil de tu Web en Español";
echo $title;
// MoFuse Versión movil de tu Web en Español
echo slug($title);
// MoFuse+Version+movil+de+tu+Web+en+Espanol
echo slug($title,'-');
// MoFuse-Version-movil-de-tu-Web-en-Espanol
echo strtolower(slug($title,'-'));
// mofuse-version-movil-de-tu-qeb-en-espanol

La funcion en cuestion;
PHP:
function slug($string, $replacement = '+', $map = array()) {
	if (is_array($replacement)) {
		$map = $replacement;
		$replacement = '+';
	}
	$quotedReplacement = preg_quote($replacement, '/');

	$merge = array(
		'/[^\s\p{Ll}\p{Lm}\p{Lo}\p{Lt}\p{Lu}\p{Nd}]/mu' => ' ',
		'/\\s+/' => $replacement,
		sprintf('/^[%s]+|[%s]+$/', $quotedReplacement, $quotedReplacement) => '',
	);
 	 
	$_transliteration = array(
	'/ä|æ|ǽ/' => 'ae',
'/ö|œ/' => 'oe',
'/ü/' => 'ue',
'/Ä/' => 'Ae',
'/Ü/' => 'Ue',
 	'/Ö/' => 'Oe',
 	'/À|Á|Â|Ã|Ä|Å|Ǻ|Ā|Ă|Ą|Ǎ/' => 'A',
 	'/à|á|â|ã|å|ǻ|ā|ă|ą|ǎ|ª/' => 'a',
 	'/Ç|Ć|Ĉ|Ċ|Č/' => 'C',
 	'/ç|ć|ĉ|ċ|č/' => 'c',
 	'/Ð|Ď|Đ/' => 'D',
 	'/ð|ď|đ/' => 'd',
 	'/È|É|Ê|Ë|Ē|Ĕ|Ė|Ę|Ě/' => 'E',
 	'/è|é|ê|ë|ē|ĕ|ė|ę|ě/' => 'e',
 	'/Ĝ|Ğ|Ġ|Ģ/' => 'G',
 	'/ĝ|ğ|ġ|ģ/' => 'g',
 	'/Ĥ|Ħ/' => 'H',
 	'/ĥ|ħ/' => 'h',
 	'/Ì|Í|Î|Ï|Ĩ|Ī|Ĭ|Ǐ|Į|İ/' => 'I',
 	'/ì|í|î|ï|ĩ|ī|ĭ|ǐ|į|ı/' => 'i',
 	'/Ĵ/' => 'J',
 	'/ĵ/' => 'j',
 	'/Ķ/' => 'K',
 	'/ķ/' => 'k',
 	'/Ĺ|Ļ|Ľ|Ŀ|Ł/' => 'L',
 	'/ĺ|ļ|ľ|ŀ|ł/' => 'l',
 	'/Ñ|Ń|Ņ|Ň/' => 'N',
 	'/ñ|ń|ņ|ň|ʼn/' => 'n',
 	'/Ò|Ó|Ô|Õ|Ō|Ŏ|Ǒ|Ő|Ơ|Ø|Ǿ/' => 'O',
 	'/ò|ó|ô|õ|ō|ŏ|ǒ|ő|ơ|ø|ǿ|º/' => 'o',
 	'/Ŕ|Ŗ|Ř/' => 'R',
 	'/ŕ|ŗ|ř/' => 'r',
 	'/Ś|Ŝ|Ş|Š/' => 'S',
 	'/ś|ŝ|ş|š|ſ/' => 's',
 	'/Ţ|Ť|Ŧ/' => 'T',
 	'/ţ|ť|ŧ/' => 't',
 	'/Ù|Ú|Û|Ũ|Ū|Ŭ|Ů|Ű|Ų|Ư|Ǔ|Ǖ|Ǘ|Ǚ|Ǜ/' => 'U',
 	'/ù|ú|û|ũ|ū|ŭ|ů|ű|ų|ư|ǔ|ǖ|ǘ|ǚ|ǜ/' => 'u',
 	'/Ý|Ÿ|Ŷ/' => 'Y',
 	'/ý|ÿ|ŷ/' => 'y',
 	'/Ŵ/' => 'W',
 	'/ŵ/' => 'w',
 	'/Ź|Ż|Ž/' => 'Z',
 	'/ź|ż|ž/' => 'z',
 	'/Æ|Ǽ/' => 'AE',
 	'/ß/'=> 'ss',
 	'/IJ/' => 'IJ',
 	'/ij/' => 'ij',
 	'/Œ/' => 'OE',
 	'/ƒ/' => 'f'
 	);

	$map = $map + $_transliteration + $merge;
	return preg_replace(array_keys($map), array_values($map), $string);
}
 
Muy buena la idea, pero de que forma se podria implementar en un blog o sitio web con muchas entradas publicadas ???
 
Atrás
Arriba