trim() elimina espacios y otros caracteres al principio y al final de una cadena. Es la función de limpieza más usada al procesar datos de formularios, y sus variantes ltrim() y rtrim() actúan solo por el lado izquierdo o derecho respectivamente. El detalle que más sorprende cuando empiezas a usarlas es qué consideran "espacio por defecto".
Caracteres que elimina por defecto
Sin segundo argumento, las tres funciones eliminan estos caracteres:
" " espacio ASCII (0x20)"t" tabulación"n" salto de línea Unix"r" retorno de carro (Windows)" " byte nulo"v" tabulación vertical
<?php $entrada = " t [email protected] n "; $limpio = trim($entrada); echo $limpio; // "[email protected]" echo strlen($entrada); // 27 echo strlen($limpio); // 19 ?>
Segundo argumento: caracteres personalizados
Puedes pasar una cadena con los caracteres exactos que quieres eliminar. PHP los trata como una lista de caracteres individuales, no como una subcadena:
<?php // Limpiar comillas de un valor CSV $valor = '"precio del producto"'; echo trim($valor, '"'); // precio del producto // Eliminar barras de una ruta $ruta = '/var/www/html/'; echo trim($ruta, '/'); // var/www/html echo ltrim($ruta, '/'); // var/www/html/ echo rtrim($ruta, '/'); // /var/www/html ?>
Ejemplo con formularios
Aplicar trim() a los datos de un formulario antes de validar previene falsos positivos con campos aparentemente rellenos que solo contienen espacios:
<?php
function sanitizarCampo(string $valor): string
{
return trim($valor);
}
$nombre = sanitizarCampo($_POST['nombre'] ?? '');
$email = sanitizarCampo($_POST['email'] ?? '');
if ($nombre === '' || $email === '') {
echo "Rellena todos los campos";
exit;
}
?>
Limpiar un CSV línea a línea
<?php
$csv = "id,nombre,preciorn1,Camiseta,19.90rn2,Pantalón,39.90rn";
$lineas = explode("n", $csv);
foreach ($lineas as $linea) {
$linea = rtrim($linea, "r"); // elimina el r de Windows
if ($linea === '') continue;
$campos = explode(',', $linea);
print_r($campos);
}
?>
Rutas de fichero
<?php
// Normalizar un directorio base sin importar si el usuario puso barra al final
$dir = rtrim('/var/www/html/', '/');
$file = 'uploads/imagen.jpg';
$ruta = $dir . '/' . $file;
echo $ruta; // /var/www/html/uploads/imagen.jpg
?>
La trampa con UTF-8 multibyte
trim() trabaja a nivel de bytes. Si el texto empieza o termina con un carácter multibyte (como un espacio de no separación xc2xa0, habitual al copiar texto de páginas web), la función no lo eliminará con su configuración por defecto:
<?php // Espacio de no separación (U+00A0) al final $texto = "hola mundoxc2xa0"; var_dump(trim($texto) === 'hola mundo'); // bool(false), el byte xc2xa0 persiste // Solución: incluirlo explícitamente o normalizar antes $limpio = trim($texto, " tnr x0Bxc2xa0"); var_dump($limpio === 'hola mundo'); // bool(true) ?>
La documentación oficial de trim() lista todos los caracteres que se eliminan por defecto y las diferencias de comportamiento entre versiones de PHP.
