Generar valor de variable.
Resumen.
En otra publicación ya hablamos de la importancia de las URLs semánticas, pues bien, en este artículo vamos a ver como generar un valor de variable con contenido semántico y caracteres válidos para ser pasado por URL (método GET). Como se puede imaginar, este artículo tiene la máxima importancia en términos SEO y todo se reduce a aplicar una función y ver su resultado en la URL.Artículo.
Tal y como hemos presentado este artículo en el resumen, puede resultar algo confuso, para tener una idea clara de lo que queremos hacer, observe el título de este artículo y el valor de la variable título que aparece en la URL (titulo=generar-valor-de-variable-deeh9).
La lógica de lo que queremos hacer es sencilla, tomamos el título del artículo y lo convertimos en una variable (mas bien un valor de variable) que sea compatible con los caracteres admitidos en una URL. Esto, lógicamente no es preciso en todos los casos, pero si es especialmente necesario por ejemplo en el caso de un listado de publicaciones, como es el caso presente, en el que su importancia de cara a los motores de búsqueda es trascendental.
La publicación presente, donde pasamos la variable “titulo” con el valor que toma el título, no podemos pasarla tal cual, ya que en el título puede haber caracteres incompatibles con una URL, y además ese conjunto de caracteres debe tener un valor semántico. Para ello debemos tener en cuenta que, por ejemplo, los espacios en blanco, las comas, los dos puntos, los signos de interrogación o las vocales acentuadas, no son válidos en una URL. También hay caracteres que aunque sean válidos, su uso puede ser cuestionable, como es el guión bajo (_) o el igual (=) dado que este indica un valor de variable, que si no existe, puede provocar un comportamiento anómalo.
En el caso de esta publicación solo tenemos como carácter no deseado los espacios en blanco, pero en otros, como “Aplicar formato a un teléfono” tenemos también acentos. Todo esto, y la presencia de otros muchos caracteres podemos solventarlo con la siguiente función:
Esta función devolverá un valor como: “generar-valor-de-variable-deeh9” que tiene dos partes, una la semántica, derivada del propio valor, y otra aleatoria, mas bien seudoaleatoria, que hará que este valor sea único, dado que esta variable tomará en nuestra base de datos los valores de clave primaria o única. En esta parte aleatoria, al primer componente le hemos asignado en el array $Ar_Mes, que es una letra que cambia en función del mes. Esto lo hemos hecho así, para que la parte aleatoria tenga un valor informativo, (que puede ser este u otro cualquiera) y que básicamente lo sabe el programador de la función.
La función recibe tres parámetros de entrada:
Por último, advertir que esta función puede dar como longitud máxima un carácter menos del indicado, esto puede ocurrir si la parte semántica se ha cortado en un espacio en blanco, que unido a la parte seudoaleatoria con un guión, eliminará uno de ellos.
La lógica de lo que queremos hacer es sencilla, tomamos el título del artículo y lo convertimos en una variable (mas bien un valor de variable) que sea compatible con los caracteres admitidos en una URL. Esto, lógicamente no es preciso en todos los casos, pero si es especialmente necesario por ejemplo en el caso de un listado de publicaciones, como es el caso presente, en el que su importancia de cara a los motores de búsqueda es trascendental.
La publicación presente, donde pasamos la variable “titulo” con el valor que toma el título, no podemos pasarla tal cual, ya que en el título puede haber caracteres incompatibles con una URL, y además ese conjunto de caracteres debe tener un valor semántico. Para ello debemos tener en cuenta que, por ejemplo, los espacios en blanco, las comas, los dos puntos, los signos de interrogación o las vocales acentuadas, no son válidos en una URL. También hay caracteres que aunque sean válidos, su uso puede ser cuestionable, como es el guión bajo (_) o el igual (=) dado que este indica un valor de variable, que si no existe, puede provocar un comportamiento anómalo.
En el caso de esta publicación solo tenemos como carácter no deseado los espacios en blanco, pero en otros, como “Aplicar formato a un teléfono” tenemos también acentos. Todo esto, y la presencia de otros muchos caracteres podemos solventarlo con la siguiente función:
Esta función solo deja caracteres del alfabeto inglés, eliminando la “ñ”, dejando todo en minúsculas y eliminando toda la acentuación, así como todo un conjunto de caracteres no admitidos en una URL, como pueden ser los paréntesis, símbolo de dólar, euro, exclamación, etc., y sustituyendo los espacios en blancos por el guión central, que en términos SEO, tiene el valor de espacio en blanco. El guión bajo (_) frecuentemente usado, se desaconseja, dado que en términos SEO es eliminado (su resultado seria: generarvalordevariabledeeh9), lo ideal es usar el guión central (-) dado que su significado en términos SEO es espacio en blanco (su resultado seria: generar valor de variable deeh9). Tampoco permite la presencia de dos o más guiones centrales consecutivos.<?php // Crea nombre de variable a partir de un texto // Funcion desarrollada por ArtesaniaWeb.ES function Var_Seman($text, $long_var, $n_aleator){ $valor_urlk = strtolower(strip_tags($text)); // Pasamos a minusculas y liminamos posibles etiquetas $valor_origi_var = array('á','é','í','ó','ú','à','è','ì','ò','ù','ä','ë','ï','ö','ü',' ','Ñ','ñ','_','*','&','(','{','[','$','=',')','}',']','<','>','¶','"',';','\'','?','¿',',','.','/','#','€','~','¬','!','¡','%','@','º','ª','|','\\',':','·','“','”'); // Valores originales $valor_nue_var = array('a','e','i','o','u','a','e','i','o','u','a','e','i','o','u','-','n','n','-',''); // Nuevos valores $filtrad1 = str_replace($valor_origi_var,$valor_nue_var,$valor_urlk); // Si hay mas de dos guiones centrales seguidos, solo dejamos uno. $filtrad2 = preg_replace('/(--+)/', '-', $filtrad1); $Ar_Mes= array(1=>'a',2=>'b',3=>'c',4=>'d',5=>'e',6=>'f',7=>'g',8=>'h',9=>'i',10=>'j',11=>'k',12=>'l'); $ini_Mes = $Ar_Mes[date('n')]; $num_carac = strlen($filtrad2); // Numero de caracteres que contiene la cadena /* $long_var_max Longitud de la cadena, a la que le restamos 1 ya que agregamos $ini_Mes al inicio de la parte aleatoria */ $long_var_max = $long_var - 1; // Numero maximo de caracteres que tendra la cadena // Generamos la parte aleatoria $carts_ale_var = 'abcdefghijklmnopqrstuvwxyz0123456789'; $contam_carts_ale_var = strlen($carts_ale_var); // Cuenta caracteres $num_cad_ale_var = $contam_carts_ale_var - 1; // Numero de caracteres en $carts_ale_var menos 1 $aleatorio_ale_var = ''; $long_cad_ale_var = $n_aleator - 1; // Longitud secuencia aleatoria for($al=0;$al<$long_cad_ale_var;$al++) { $aleatorio_ale_var .= substr($carts_ale_var,mt_rand(0,$num_cad_ale_var),1); } $seP = '-'; if($num_carac > $long_var_max){ $longt_cad = $long_var_max - ($long_cad_ale_var + 1); $long_var_url = substr($filtrad2, 0,$longt_cad); // Imprimimos los X primeros caracteres de la izquierda $_devuelve_var_url = $long_var_url.$seP.$ini_Mes.$aleatorio_ale_var; } else { $_devuelve_var_url = $filtrad2.$seP.$ini_Mes.$aleatorio_ale_var; } /* Puede devolver un caracter menos de los solicitados si la parte no aleatoria termina en guion central (-) */ return preg_replace('/(--+)/', '-', $_devuelve_var_url); } // Aplicamos la funcion $titulo = 'Aplica "formato" a un valor “Id”. '; // Texto a convertir $max_caracteres = 40; // Longitud maxima de la variable $n_aleatorios = 6; // Caracteres aleatorios $paso_url = Var_Seman($titulo, $max_caracteres, $n_aleatorios); echo "<b>Original</b>: $titulo <br /> <b>Variable:</b> $paso_url <br /> Numero de caracteres: ".strlen($paso_url).""; ?>
Esta función devolverá un valor como: “generar-valor-de-variable-deeh9” que tiene dos partes, una la semántica, derivada del propio valor, y otra aleatoria, mas bien seudoaleatoria, que hará que este valor sea único, dado que esta variable tomará en nuestra base de datos los valores de clave primaria o única. En esta parte aleatoria, al primer componente le hemos asignado en el array $Ar_Mes, que es una letra que cambia en función del mes. Esto lo hemos hecho así, para que la parte aleatoria tenga un valor informativo, (que puede ser este u otro cualquiera) y que básicamente lo sabe el programador de la función.
La función recibe tres parámetros de entrada:
- El valor que queremos transformar.
- La longitud máxima del conjunto de caracteres.
- El número de caracteres aleatorios.
Por último, advertir que esta función puede dar como longitud máxima un carácter menos del indicado, esto puede ocurrir si la parte semántica se ha cortado en un espacio en blanco, que unido a la parte seudoaleatoria con un guión, eliminará uno de ellos.
Tags: Variable || GET || URL || caracteres