20, agosto - 2018

Formatear cadenas en PHP

Formatear cadenas en PHP

Es muy habitual el tener que aplicar diferentes formatos en PHP a cadenas de texto para su posterior procesamiento, cuando manipulamos datos de formulario, datos de MySQL, o archivos en general. PHP cuenta con gran variedad de funciones predefinidas para poder llevar a cabo estas acciones. Veamos cuales.

Limpiar cadenas de texto mediante chop(), trim(), ltrim() y rtrim()

Antes de procesar una cadena de texto, en particular una sola palabra, clave de acceso o cadena de encriptación, es muy recomendable procesarla mediante alguna de estas funciones. Con ellas, vamos a poder limpiar los espacios en blanco de la cadena tanto al comienzo como al final, o en alguno de los dos extremos. Además, vamos a poder limpiar también elementos de consola o base de datos tales como retorno de carro, tabulación o salto de línea.

//////////////////////////////////////////////////////////
$cadena = "\r\nCadena\r\n";
$cadena_solo_left = ltrim($cadena);
$cadena_formateada = trim($cadena);
$cadena_solo_right = rtrim($cadena);
echo $cadena_solo_left.$cadena_formateada.$cadena_formateada.$cadena_solo_right;
/** RESPUESTA */
// Cadena CadenaCadena Cadena
//////////////////////////////////////////////////////////

Nota: el ejemplo es un poco extraño a simple vista, pero, si se analiza despacio se puede ver que la cadena inicial tiene espacios a ambos lados, en la primera ejecución limpiamos solo los de la izquierda, dejando un espacio a la derecha, en la segunda limpiamos ambos, consiguiendo que las cadenas se junten y en el tercero limpiamos solo a la derecha, dejando el espacio de la izquierda.

Formatos de cadenas para impresión y seguridad

En ocasiones cuando extraemos datos de una base de datos o directamente desde un archivo, éste no se imprime como esperábamos, ya sea por omisión de saltos de línea, o por cambios de formato. Para evitar estos comportamientos y también como refuerzo a la seguridad del tipo de datos a imprimir existe una serie de funciones muy útiles que podemos ver a continuación.

La función nl2br()

Esta función toma como parámetro la propia cadena y sustituye los posibles saltos de línea que contenga por etiquetas de código fuente XHTML

//////////////////////////////////////////////////////////
$cadena = "\r\nCadena\r\n con saltos \r\n de línea";
echo $cadena;
/** RESULTADO */
// Cadena con saltos de línea
echo nl2br($cadena);
/** RESULTADO */
/*
Cadena
con saltos
de línea
*/
//////////////////////////////////////////////////////////

Las funciones printf() y sprintf()

Con estas dos funciones vamos a poder dar formatos específicos a las variables recibidas o extraídas por ejemplo de una base de datos. Son muy útiles y muy seguras para evitar que se alteren los formatos de datos. Su uso lo podemos ver en los ejemplos a continuación. La principal diferencia entre printf() y sprintf() radica en que la primera imprime la cadena en el navegador y la segunda devuelve la cadena con formato sin imprimirla, por lo demás funcionan de la misma forma. Antes de ver los ejemplos tenemos que ver los códigos de tipos de datos que se pueden aplicar a la función y a los propios tipos de dato.
Son éstos:

Ahora que ya sabemos los códigos que tiene cada uno de los tipos de datos podemos ver los ejemplos del uso de printf() y sprintf()

//////////////////////////////////////////////////////////
$cadena = "En la casa había %d puertas y %d ventanas de %s, una de %f de grosor";
printf($cadena,2, 5, "aluminio", 15.2);
/** RESPUESTA */
// En la casa había 2 puertas y 5 ventanas de aluminio, una de 15.200000 de grosor
$cadena = "En la casa había %d puertas y %d ventanas de %s, una de %.2f de grosor";
printf($cadena,2, 5, "aluminio", 15.2);
/** RESPUESTA */
// En la casa había 2 puertas y 5 ventanas de aluminio, una de 15.20 de grosor
$cadena = "En la casa había %2\$d puertas y %1\$d ventanas de %3\$s, una de %4\$.1f de grosor";
printf($cadena,2, 5, "aluminio", 15.2);
/** RESPUESTA */
// En la casa había 5 puertas y 2 ventanas de aluminio, una de 15.2 de grosor
//////////////////////////////////////////////////////////

Nota: Como se puede ver en los ejemplos, hemos intentado variarlos para mostrar algunas de las posibilidades que tenemos a la hora de dar formato a los tipos de datos en las cadenas de texto, la primera es la más sencilla y poco hay que explicar, en el segundo ejemplo, usamos la expresión $.2f donde el .2 le está indicando que deseamos mostrar solo dos decimales detrás del signo punto, como se ve lo aplica correctamente. En el tercer ejemplo, alteramos el orden de las declaraciones cambiando el número de puertas por el de ventanas, gracias a la expresión 2\$ donde el número es la posición del elemento que queremos mostrar en ese lugar, cuando se usa esta expresión es necesario dar orden a todos los elementos para que el funcionamiento sea el deseado.

Establecer mayúsculas y minúsculas en una cadena mediante strtoupper(), strtolower(), ucfirst() y ucwords()

Estas funciones van a permitir alterar la cadena a mayúsculas y minúsculas respectivamente, su uso es bastante sencillo como podemos ver a continuación:

//////////////////////////////////////////////////////////
$cadena = "Esta cadena está en minúsculas originalmente";
echo strtoupper($cadena);
/** RESPUESTA */
// ESTA CADENA ESTá EN MINúSCULAS ORIGINALMENTE
$cadena = "ESTA CADENA ESTÁ EN MAYÚSCULAS ORIGINALMENTE";
echo strtolower($cadena);
/** RESPUESTA */
// esta cadena est� en may�sculas originalmente
$cadena = "este es otro ejemplo...";
echo ucfirst($cadena);
/** RESPUESTA */
// Este es otro ejemplo...
$cadena = "y el último ejemplo es éste...";
echo ucwords($cadena);
/** RESPUESTA */
// Y El último Ejemplo Es éste...
//////////////////////////////////////////////////////////

Nota: como vemos en los ejemplos, estas funciones no funcionan (valga la redundancia) bien con los signos de acentuación, tampoco con el carácter ñ, ya que su interpretación es en lengua anglosajona (en inglés) y ellos no usan dichos caracteres, para que el funcionamiento fuese correcto con esos caracteres habría que aplicar alguna otra función de conversión, algo que de momento no vamos a hacer en esta página. No obstante su uso nos puede hacer falta en algún momento y no está de más saber cómo se pueden usar estas funciones de PHP.

Establecer formatos de almacenamiento addslashes() y stripslashes()

Existe una serie de caracteres que son perfectamente válidos para su uso en scripts de programación PHP pero que pueden representar un problema en scripts o llamadas a bases de datos SQL, en especial los caracteres de comillas (dobles y simples), las barras invertidas (derecha e izquierda) y la expresión NULL, ya que una base de datos los podría interpretar como caracteres de control y no de cadena. Debemos buscar la forma de indicar a la base de datos que se tratan de caracteres de formato y no de control para que no genere un error o los almacene de forma incorrecta. PHP incorpora estas dos funciones específicas para marcar estos caracteres especiales y poder así usarlos sin problemas en las llamadas SQL que utilicemos. En concreto, las comillas dobles se convierten a \”, las simples igual se convierten a \’ y la barra invertida se convierte a  \\.

//////////////////////////////////////////////////////////
$cadena = "Esto es una cadena con \ caracteres 'especiales' ";
echo $cadena;
/** RESPUESTA */
// Esto es una cadena con \ caracteres 'especiales'
$cformateada = addslashes($cadena);
echo $cformateada;
/** RESPUESTA */
// Esto es una cadena con \\ caracteres \'especiales\'
//////////////////////////////////////////////////////////

Nota: como podemos ver, su uso es bastante sencillo, básicamente con addslashes() formateamos antes de ingresar los datos en la base de datos, y con stripslashes() los formateamos cuando son extraídos de una base de datos antes de imprimirlos en HTML.

Combinar y dividir cadenas con PHP

En ocasiones, puede que necesitemos analizar una determinada frase por partes, como pueda ser por ejemplo una dirección de Email. En otras, puede que necesitemos añadir texto o eliminar texto de una cadena, por ejemplo, si necesitamos eliminar ciertas palabras o sustituirlas por otras. Como siempre, PHP incorpora funciones internas para poder realizar estas acciones de una forma rápida y sencilla. Veamos cómo.

Uso de las funciones explode(), implode() y join()

Con estas funciones vamos a poder dividir o unir una cadena en diferentes partes indicando un separador, vemos algunos ejemplos de su uso

//////////////////////////////////////////////////////////
$cadena = "estoesun@email.com";
$cadenaex = explode('@', $cadena);
$i = 0;
foreach($cadenaex as $c) {
    if($i<1) echo $c . "-";
    else echo $c;
    $i ++;
}
/** RESPUESTA */
// estoesun-email.com
echo $cadenaex[1];
/** RESPUESTA */
// email.com
//////////////////////////////////////////////////////////

Nota: para revenir los efectos de explode() podemos usar la función inversa inplode() o join() ambas con idéntico funcionamiento.

Uso de strtok()

Ligéramente similar a la anterior estaría strtok(), en este caso en lugar de dividir la cadena en un array, strtok lo hace es que trocea la cadena según el separador que marquemos, combinada con un bucle while por ejemplo, podemos extraer una por una las palabras de una cadena, o si cambiamos el separador, las líneas o las frases. Podemos ver su uso a continuación.

//////////////////////////////////////////////////////////
$string = "Esto es una cadena de siete palabras";
/* Utiliza tabulador y nueva línea como caracteres de tokenización, así */
$corte = strtok($string, " \t");
$i = 1;
while ($corte !== false) {
echo "Palabra " .$i . "º = $corte
";
$corte = strtok(" \t");
++$i;
}
/** RESPUESTA */
/*
Palabra 1º = Esto
Palabra 2º = es
Palabra 3º = una
Palabra 4º = cadena
Palabra 5º = de
Palabra 6º = siete
Palabra 7º = palabras
*/
//////////////////////////////////////////////////////////

Uso de substr()

La función substr() es adecuada para extraer partes de una cadena con longitud fija, es decir, cuando sepamos la longitud de la cadena podremos marcar una determinada parte de ella decidiendo si queremos hacerlo desde el principio o desde el final. Vemos tres ejemplos prácticos de su uso.

//////////////////////////////////////////////////////////
$cadena = "La cadena de texto tiene un total x caracteres";
$longitud = strlen($cadena);
/** RESPUESTA */
// 46 caracteres
$extraccion = $longitud - 10;
echo $longitud;
echo substr($cadena, $extraccion);
/** RESPUESTA */
// caracteres
// Se ha medido la longitud total de la cadena mediante strlen()
// A la longitud total le hemos restado el número de caracteres de la última palabra
// Hemos indicado a substr que elimine todos los caracteres comenzando desde el principio
// de la cadena, menos los 10 de la última palabra, resultado la última palabra
echo substr($cadena, -21);
/** RESPUESTA */
// un total x caracteres
// Esta vez, le hemos indicado que comience por el final, al tener el valor en negativo
// Si comenzamos por el final y contamos 21 caracteres, el corte es el que ha mostrado
// como respuesta
echo substr($cadena, 10, 8);
/** RESPUESTA */
// de texto
// En esta ocasión, incluimos un parámetro más el número 8, que indica la longitud de texto
// que deseamos extraer, hemos indicado que a partir del 10º caracter, muestre los 8 siguientes
echo substr($cadena, 28, -10);
/** RESPUESTA */
// total x
// Por último, si el caracter longitud es negativo está indicando, que extraiga a partir del
// caracter 28 y hasta el -10 comenzando por el final, en este caso la respuesta texto x
//////////////////////////////////////////////////////////

Nota: alternativamente, se puede usar la función strlen() para conocer la longitud total de la cadena, también, hay que tener en cuenta que los espacios en blanco cuentan como caracteres, para comprender bien el uso de esta función lo mejor es hacer unas cuantas pruebas con ella.

¿Te ha parecido interesante este contenido..?
En ese caso, te pedimos por favor que nos des tu valoración graicas a esto podemos mejorar nuestras lecciones. Gracias.
1 estrella2 estrellas3 estrellas4 estrellas5 estrellas (Ninguna valoración todavía)
Cargando…

Social Media

  • YouTube

    Suscríbete a nuestro canal de YouTube para ver todos nuestros vídeos sobre programación

  • Twitter

    Síguenos en Twitter e infórmanos de ello, es muy probable que también te sigamos

  • Facebook

    Estamos pensando si abrir una página de Facebook o no...

  • LinkedIn

    En breve...

  • Instagram

    En breve...

  • Github

    En breve...

A %d blogueros les gusta esto: