trim($string) renvoie la chaîne sans les espaces blancs au début et à la fin : espaces, tabulations, sauts de ligne, retours chariot, octets NUL et tabulations verticales. ltrim() ne les supprime qu'au début et rtrim() qu'à la fin. Les espaces au milieu sont gardés.
La sortie de var_dump() montre la longueur de chaque résultat, ce qui rend visibles les caractères supprimés. Appliquer trim est la première chose à faire avec la plupart des valeurs d'un formulaire (les mots de passe sont l'exception, voir la fin de la page) : un utilisateur qui tape ada@example.com avec un espace final doit quand même pouvoir se connecter.
Syntaxe
trim(string $string, string $characters = " \n\r\t\v\0"): string
ltrim(string $string, string $characters = " \n\r\t\v\0"): string
rtrim(string $string, string $characters = " \n\r\t\v\0"): string
trim() renvoie une nouvelle chaîne ; elle ne modifie pas la variable que vous passez.
Supprimer des caractères précis
Le second argument remplace la liste par défaut. Chaque caractère qu'il contient est supprimé aux extrémités, dans n'importe quel ordre et autant de fois que nécessaire. .. définit une plage, donc 'a..z' signifie toutes les lettres minuscules.
Pour continuer à supprimer aussi les espaces blancs normaux, incluez-les dans la liste : trim($s, " \n\r\t\v\0/").
Le second argument est un ensemble de caractères, pas une chaîne
trim() ne supprime pas un mot ou un suffixe. Elle supprime n'importe lequel des caractères listés, aux deux extrémités, jusqu'à en rencontrer un qui n'est pas dans la liste. Cela surprend ceux qui essaient de retirer une extension de fichier :
La première ligne supprime aussi le h du début, car h fait partie de l'ensemble. Pour retirer un préfixe ou un suffixe fixe, utilisez str_starts_with() ou str_ends_with() avec substr(), ou str_replace() si le texte ne peut apparaître nulle part ailleurs.
Supprimer l'espace pleine chasse (saisie japonaise)
Les claviers japonais produisent souvent l'espace idéographique (U+3000), par exemple autour d'un nom tapé dans un formulaire. Il ne fait pas partie de la liste par défaut de trim, et le mettre dans le second argument est un piège : trim() travaille octet par octet, l'espace correspond aux 3 octets E3 80 80, et E3 est aussi le premier octet de chaque hiragana et katakana, si bien qu'un nom qui commence par l'un d'eux perd le premier octet de ce caractère. Utilisez une expression régulière avec le modificateur u :
\A et \z ancrent au début et à la fin de la chaîne. Avec le modificateur u, \s correspond à tous les espaces Unicode : les espaces blancs ASCII, l'espace pleine chasse et l'espace insécable (U+00A0) qu'apporte souvent un copier-coller depuis une page web. Sans u, \s ne correspond qu'aux espaces blancs ASCII et l'espace pleine chasse reste. PHP 8.4 ajoute mb_trim(), mb_ltrim() et mb_rtrim() pour cela ; en PHP 8.3 et avant, l'expression régulière est la solution.
Appliquer trim à chaque valeur d'un tableau
array_map('trim', $array) nettoie chaque valeur et garde les clés. Un cas typique est une liste séparée par des virgules venant d'un champ texte, découpée avec explode() :
Appliquer trim à une valeur de formulaire avant de la valider
Appliquez d'abord trim, puis vérifiez la chaîne vide. Un champ qui ne contient que des espaces est alors refusé comme vide. Exécutez ce bloc, tapez un nom entouré d'espaces dans le formulaire et cliquez sur Send : le même script s'exécute à nouveau avec $_POST rempli.
N'appliquez pas trim aux mots de passe : un espace à la fin d'un mot de passe en fait partie.
Questions fréquentes
Que supprime trim() en PHP ?
Par défaut, aux deux extrémités de la chaîne : les espaces, les tabulations (\t), les sauts de ligne (\n), les retours chariot (\r), les octets NUL (\0) et les tabulations verticales (\v). Elle ne touche jamais au milieu de la chaîne.
Quelle est la différence entre trim, ltrim et rtrim ?
trim() nettoie les deux extrémités, ltrim() seulement le début et rtrim() seulement la fin. Les trois prennent la même liste facultative de caractères à supprimer.
Pourquoi trim() ne supprime-t-elle pas l'espace japonais pleine chasse ?
L'espace pleine chasse (U+3000) ne fait pas partie de la liste par défaut de trim et occupe 3 octets en UTF-8. Utilisez preg_replace('/\A\s+|\s+\z/u', '', $s) : avec le modificateur u, \s correspond à tous les espaces Unicode, U+3000 compris. PHP 8.4 ajoute mb_trim(), qui le supprime aussi.
Comment supprimer la dernière virgule d'une chaîne en PHP ?
rtrim($s, ',') supprime toutes les virgules finales. Si un espace peut la suivre, incluez aussi l'espace : rtrim($s, ', ').
Comment appliquer trim à chaque valeur d'un tableau ?
array_map('trim', $array) renvoie un nouveau tableau où chaque valeur est nettoyée, en gardant les clés. Pour des tableaux imbriqués, utilisez array_walk_recursive() avec une référence.