Lenguaje PHP

URLs Amigables con PHP: Ejemplo completo con un string

URLs Amigables con PHP. Hoy en día utilizar URLs amigables es casi ya una obligación, porque ayuda a mejorar tu ranking en los distintos motores de búsqueda en internet. Por otro lado, si no lo usamos corremos el riesgo de desaparecer de los resultados de búsqueda.

Su uso es muy sencillo, las URL amigable proporciona la información directa sobre el contenido de la página web. Para que se entienda mejor, te mostramos la diferencia entre una URL normal y una URL amigable para competir en los rankings de google:

  • URL normal: http://website.com/articulo.php?id=342
  • URL amigable: http://website.com/curso-avanzado-de-php-pdo

Si observas los dos vínculos podrás apreciar que la segunda URL es mucho más fácil saber cuál será el contenido de la página (URL amigable), que en la URL normal. Si deseas aumentar el ranking de tu sitio web respecto a los motores de búsqueda, lo que tenemos que hacer es migrar tus URLs a URLs amigables listas para el SEO.

URLs Amigables con PHP: Ejemplo completo con un string
URLs Amigables con PHP: Ejemplo completo con un string

URLs Amigables con PHP: Dos formas

En este artículo, abordaremos el tema de cómo generar URL amigables a partir de un string utilizando el lenguaje PHP. Haciendo uso de funciones para convertir una cadena de texto o cadena extraída de la base de datos a una cadena con el formato de URL amigable.

Hemos agrupado todo el código PHP en una función llamada generarSeoURL(). Esta función crea automáticamente un slug limpio y muy recomendado para el SEO.

A) Primera Forma: Función generarSeoURL()

Esta función agarra un string y crea una cadena URL legible por humanos con el carácter guion “-” como separador de palabras. Estos son sus parámetros:

  • $string: (obligatorio) El string que quieres convertir a una URL amigable y es obligatorio.
  • $wordLimit: (opcional) Limite de palabras en la URL amigable. Por defecto es 0 (sin límite)
function generarSeoURL($string, $wordLimit = 0){
$separator = '-';

if($wordLimit != 0){
$wordArr = explode(' ', $string);
$string = implode(' ', array_slice($wordArr, 0, $wordLimit));
}

$quoteSeparator = preg_quote($separator, '#');

$trans = array(
'&.+?;'                    => '',
'[^wd _-]'            => '',
's+'                    => $separator,
'('.$quoteSeparator.')+'=> $separator
);

$string = strip_tags($string);
foreach ($trans as $key => $val){
$string = preg_replace('#'.$key.'#i'.(UTF8_ENABLED ? 'u' : ''), $val, $string);
}

$string = strtolower($string);

return trim(trim($string, $separator));
}

Uso de la función

Para su uso tenemos que pasar la cadena como primer parámetro en la función generarSeoURL(). Si quieres restringir el número de palabras en la URL, recuerda pasarle un número entero a la función como segundo parámetro. Veamos un ejemplo.

Sin límite de palabras

$EntradaTitulo= 'Curso avanzado de PHP PDO';
$seoAmigableURL = generarSeoURL($EntradaTitulo);

//La salida será: curso-avanzado-de-php-pdo

Con límite de palabras

$EntradaTitulo= 'Curso avanzado de PHP PDO';
$seoAmigableURL = generarSeoURL($EntradaTitulo, 4);

//La salida será: curso-avanzado-de-php

B) Segunda Forma: Función format_uri

Esta función es más corta que el anterior pero más potente a la vez, puede convertir cualquier tipo de cadena, caracteres especiales a texto: la función se llama «format_uri«.

<?php
function format_uri( $string, $separator = '-' )
{
$accents_regex = '~&([a-z]{1,2})(?:acute|cedil|circ|Grave|lig|orn|ring|slash|th|tilde|uml);~i';
$special_cases = array( '&' => 'and', "'" => '');
$string = mb_strtolower( trim( $string ), 'UTF-8' );
$string = str_replace( array_keys($special_cases), array_values( $special_cases), $string );
$string = preg_replace( $accents_regex, '$1', htmlentities( $string, ENT_QUOTES, 'UTF-8' ) );
$string = preg_replace("/[^a-z0-9]/u", "$separator", $string);
$string = preg_replace("/[$separator]+/u", "$separator", $string);
return $string;
}
?>

¿Cómo usar la función?

Su uso es muy simple, solo debemos de insertar la variable con la cadena a convertir o cadena extraída a la base de datos.

$EntradaTitulo= 'Curso avanzado de PHP PDO';
$seoAmigableURL = format_uri($EntradaTitulo);

//La salida será: curso-avanzado-de-php-pdo

Otro ejemplo

echo format_uri("#@&~^!âèêëçî");
//salida en el navegador: -and-aeeeci

CONCLUSIÓN DEL ARTICULO

En este articulo hemos aprendido a eliminar caracteres especiales de las cadenas, por ejemplo: las tildes, las eñes, caracteres alfanuméricos a textos y números. Además, los espacios en blanco en guiones.

Los usos de estas funciones son varias, por ejemplo: podemos limpiar el nombre de los archivos e imágenes que subimos al servidor. Sin embargo, lo más importante es convertir un título a URLs Amigables y lo podemos hacer de una manera muy sencilla.

Espero que esta explicación les ayude en sus proyectos web

Nestor Tapia

Bloggero, amante de la programación PHP, innovador y me fascina compartir información. Desde que conocí el entorno informatico y el internet me llamó la atención la programación, Por tal motivo he creado mi blog BAULPHP.COM para compartir mis experiencias con todos ustedes. ¡Gracias por leerme!.

5 comentarios

  1. Pero esa función donde la colocas para que tu url aparezca así? Solo explicas cómo hacerlo pero no detallas donde ponerlo o como mandas a llamar.ar a la variable

    1. Hola Santiago,

      Esta función solo es para limpiar cadenas de texto para ser usada posteriormente en la URL, obviamente se tiene que agregar la cadena limpiada en una columna en MySQL.

      La función lo puedes usar por ejemplo en un archivo llamado funciones.php y posteriormente llamarlo con un include o require según tu necesidad.

      $EntradaTitulo= 'Curso avanzado de PHP PDO';
      $seoAmigableURL = format_uri($EntradaTitulo);

      //La salida será: curso-avanzado-de-php-pdo

      Si deseas complementar la información puedes visitar este articulo donde detallo el tema.

      https://www.baulphp.com/crear-url-unica-con-php-ejemplo-completo/

      Espero haberte ayudado

      Un saludo cordial

    1. Hola Juan

      Para que trabajen las URL amigables tendría que ser el método GET, recordemos que la información en método POST viaja oculta y GET visible.

      Ahora, usando el método GET podemos proteger la información usando Filtros de saneamiento del PHP

      $variable= filter_var($_GET['id'], FILTER_SANITIZE_NUMBER_INT));
      $variable2= filter_var($_GET["ordenar"], FILTER_SANITIZE_STRING); 
      

      saneamiento del PHP

      Espero haberte ayudado, saludos

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba