Hoy me gustaría hablaros de una función nativa de php, desconocida para la mayoría, pero que grácias a ella podemos resolver una problemática que seguramente nos ocuparía varias lineas de código. La función se llama strtr, acrónimo de “String Translation“.
¿Quién de nosotros, sufridos programadores, no se ha encontrado en la situación de tener que “limpiar” una cadena de texto, para emplearla, por ejemplo, en una url?
Sabemos que si bien los navegadores actuales son capaces de interpretar correctamente, simbolos acentuados, o carácteres tan españoles como la letra Ñ, siempre las convertiran a sus correspondientes entidades precedidas con un %, por ejemplo el %20 para un espacio.
La solución habitual y rápida consiste en realizar sucesivos reemplazos mediante funciones str_replace.
Tomemos por caso la frase siguiente que queremos convertir en una url válida:
$valor = "¿Sabías que sólo España 'is different'?";
Como podemos observar hay varios caracteres que generarán una url “sucia”. A saber: ¿, ?, ó, ñ, la tilde ( ‘ ) y el espacio.
Habitualmente para solventarlo reemplazariamos los carácteres acentuados por los mismos sin acentuar, y los simbolos de exclamación e interrogación, los reemplazariamos por un guión.
$valor = str_replace( '¿', '-', $valor );
$valor = str_replace( '?', '-', $valor );
$valor = str_replace( 'ó', 'o', $valor );
$valor = str_replace( 'ñ', 'n', $valor );
$valor = str_replace( '\'', '-', $valor );
... y asi hasta rellenar las posibles variantes ...
Es fácil imaginarse la excesiva longitud de texto que podemos llegar a generar siguiendo éste sistema.
Pues es en este punto que la función strtr acude en nuestra ayuda. Como su nombre indica, nos permitirá “traducir” una série de carácteres a otra série de reemplazo. Los parámetros que utiliza son:
strtr(
$valor_cadena_original,
$cadena_serie_origen,
$cadena_serie_reemplazo
)
Los parametros $cadena_serie_origen y $cadena_serie_reemplazo han de tener la misma longitud. En caso contrario, el sistema emparejará los carácteres hasta la mas corta de las dos.
La operación que realiza es muy sencilla, reemplaza todos los caracteres de $valor_cadena_original, que coincidan con el primer carácter de $cadena_serie_original con el primer carácter de $cadena_serie_reemplazo. Después repite la misma operación con el segundo, luego con el tercero, y hasta el final.
Retomando el ejemplo anterior, grácias a strtr nos quedaría el código siguiente:
$valor = strtr( $valor, '?¿óñ\'', '--on-' )
Sobran las palabras. La reducción de código es sencillamente abrumadora.
Y urlencode??
http://ar.php.net/manual/es/function.urlencode.php
Hola Morfeo,
urlencode funcionaria genial para pasar la url via un navegador, pero por ejemplo el codigo siguiente:
$valor = urlencode( ‘?¿óñ’)
Guardaria en $valor “%3F%BF%F3%F1%27″. Lo que visualmente no es muy atractivo, ni fácil de recordar si queremos teclearlo.
En cambio con el sistema de sustitución cambia un caracter por otro, en ese caso un guión “-”.