En ocasiones en ASP hemos querido reemplazar carácteres de un texto o una cadena para eliminar los acentos y los carácteres extraños como paréntesis, puntos, comas, corchetes, ñ, ç,… Por ejemplo, para generar URL’s amigables para los buscadores (URL friendly o permalinks), necesitamos convertir las cadenas a texto plano sin carácteres extraños. Podemos hacer funciones de reemplazo de carácteres intentando tener en cuenta todos los carácteres extraños que nos podamos encontrar en una cadena, pero las expresiones regulares y sus herramientas de reemplazo nos pueden ayudar mucho. Se trata de utilizar el operador .replace del objeto de expresión regular en ASP, jugando con los patrones para las condiciones.

En la funcion siguiente, a partir de una cadena de texto dada se convierte a una cadena amigable para los buscadores, eliminando los carácteres extraños. En primer lugar, se eliminan los espacios a ambos lados de la cadena y se reemplazan o eliminan los carácteres que pueden dar problemas en bases de datos como las comillas simples y dobles, saltos de línea y espacios. Después se usan las expresiones regulares para eliminar de las vocales las tildes abiertas y cerradas, diéresis,… y para sustituir la ñ y la ç por n y c respectivamente. Es decir, los carácteres que cumplan el patrón de la expresión regular serán sustituidos por el carácter dado. Por último, se eliminan los carácteres restantes que no cumplan el patrón de URL amigable (letras minúsculas, números y guión).

function convertirAURLfriendly(cadena)
  if not isNull(cadena) then
    ' Eliminamos los espacios a ambos lados de la cadena
    strCadena = Trim(lCase(cadena))
    ' Reemplazamos carácteres especiales
    strCadena = replace(replace(strCadena,"'",""),"""","")
    strCadena = replace(replace(strCadena,""",""),vbcrlf,"")
    strCadena = replace(replace(strCadena,"<br>","")," ","-")
    set expReg = New RegExp
    ' Todas las ocurrencias
    expReg.Global = True
    expReg.Pattern = "[àáâãäå]"
    strCadena = expReg.Replace(strCadena, "a")
    expReg.Pattern = "[èéêë]"
    strCadena = expReg.Replace(strCadena, "e")
    expReg.Pattern = "[ìíîï]"
    strCadena = expReg.Replace(strCadena, "i")
    expReg.Pattern = "[òóôõö]"
    strCadena = expReg.Replace(strCadena, "o")
    expReg.Pattern = "[ùúûü]"
    strCadena = expReg.Replace(strCadena, "u")
    expReg.Pattern = "[ñ]"
    strCadena = expReg.Replace(strCadena, "n")
    expReg.Pattern = "[ç]"
    strCadena = expReg.Replace(strCadena, "c")
    ' Todo lo que no cumpla este patron
    expReg.Pattern = "[^a-z0-9-]"
    strCadena = expReg.Replace(strCadena, "")
    set expReg = nothing
    convertirAURLfriendly = left(strCadena,256)
  else
    convertirAURLfriendly = ""
  end if
end function

Hacer la conversión de la función anterior a otros lenguajes como PHP o Javascript es relativamente sencillo, en otros artículos de este blog se pueden encontrar ejemplos de expresiones regulares en Javascript. De hecho, la función anterior an ASP para generar URL’s amigables me funcionaba en archivos ANSI con codificación iso-8859-1, pero da problemas con los acentos y carácteres extraños cuando el archivo está en UTF-8. Así que después de darle muchas vueltas, convertí la función de ASP a Javascript y la llamaba antes de enviar el formulario, es decir generaba la URL amigable desde Javascript y lo almacenaba en una variable hidden que también envío con el formulario. La función en Javascript que funciona para UTF-8:

function convertirAURLfriendly(str) {
  strCadena = str;
  if (strCadena!='') {
    strCadena = strCadena.toLowerCase();
    // Elimina espacios al principio y al final
    strCadena = strCadena.replace(/^\s*|\s*$/g,"");
    strCadena = strCadena.replace("&quot;",'');
    strCadena = strCadena.replace(" ","-").replace("_","-");
    strExpReg = /[àáâãäå]/gi;
    strCadena = strCadena.replace(strExpReg,'a');
    strExpReg = /[èéêë]/gi;
    strCadena = strCadena.replace(strExpReg,'e');
    strExpReg = /[ìíîï]/gi;
    strCadena = strCadena.replace(strExpReg,'i');
    strExpReg = /[òóôõö]/gi;
    strCadena = strCadena.replace(strExpReg,'o');
    strExpReg = /[ùúûü]/gi;
    strCadena = strCadena.replace(strExpReg,'u');
    strExpReg = /[ñ]/gi;
    strCadena = strCadena.replace(strExpReg,'n');
    strExpReg = /[ç]/gi;
    strCadena = strCadena.replace(strExpReg,'c');
    // Todo lo que no cumpla este patron
    strExpReg = /[^a-z0-9-]/gi;
    strCadena = strCadena.replace(strExpReg,'');
    return strCadena.substring(0,255);
  }
  return '';
}
Etiquetas: , , , , , , , , , , , , , , , , , , , ,
Deja una Respuesta