trim en PHP: limpiar espacios y caracteres al inicio y al final

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, " tnrx0Bxc2xa0");
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.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP