trim

(PHP 4, PHP 5, PHP 7)

trim Supprime les espaces (ou d'autres caractères) en début et fin de chaîne

Description

string trim ( string $str [, string $character_mask = " \t\n\r\0\x0B" ] )

trim() retourne la chaîne str, après avoir supprimé les caractères invisibles en début et fin de chaîne. Si le second paramètre charlist est omis, trim() supprimera les caractères suivants :

  • " " (ASCII 32 (0x20)), un espace ordinaire.
  • "\t" (ASCII 9 (0x09)), une tabulation.
  • "\n" (ASCII 10 (0x0A)), une nouvelle ligne (line feed).
  • "\r" (ASCII 13 (0x0D)), un retour chariot (carriage return).
  • "\0" (ASCII 0 (0x00)), le caractère NUL.
  • "\x0B" (ASCII 11 (0x0B)), une tabulation verticale.

Liste de paramètres

str

La chaîne de caractères qui sera coupée.

character_mask

Optionnellement, les caractères supprimés peuvent aussi être spécifiés en utilisant le paramètre character_mask. Listez simplement tous les caractères que vous voulez supprimer. Avec .. vous pouvez spécifier une plage de caractères.

Valeurs de retour

La chaîne de caractères coupée.

Exemples

Exemple #1 Exemple avec trim()

<?php

$text   
"\t\tThese are a few words :) ...  ";
$binary "\x09Example string\x0A";
$hello  "Hello World";
var_dump($text$binary$hello);

print 
"\n";

$trimmed trim($text);
var_dump($trimmed);

$trimmed trim($text" \t.");
var_dump($trimmed);

$trimmed trim($hello"Hdle");
var_dump($trimmed);

$trimmed trim($hello'HdWr');
var_dump($trimmed);

// Supprime les caractères de contrôle ASCII au début et à la fin de $binary
// (de 0 à 31 inclusif)
$clean trim($binary"\x00..\x1F");
var_dump($clean);

?>

L'exemple ci-dessus va afficher :

string(32) "        These are a few words :) ...  "
string(16) "    Example string
"
string(11) "Hello World"

string(28) "These are a few words :) ..."
string(24) "These are a few words :)"
string(5) "o Wor"
string(9) "ello Worl"
string(14) "Example string"

Exemple #2 Suppression de caractères dans un tableau avec trim()

<?php
function trim_value(&$value)
{
    
$value trim($value);
}

$fruit = array('apple','banana '' cranberry ');
var_dump($fruit);

array_walk($fruit'trim_value');
var_dump($fruit);

?>

L'exemple ci-dessus va afficher :

array(3) {
  [0]=>
  string(5) "apple"
  [1]=>
  string(7) "banana "
  [2]=>
  string(11) " cranberry "
}
array(3) {
  [0]=>
  string(5) "apple"
  [1]=>
  string(6) "banana"
  [2]=>
  string(9) "cranberry"
}

Notes

Note: Utilisation possible : suppression des caractères en milieu de chaîne

En raison du fait que la fonction trim() supprime des caractères en début et en fin de chaîne, ce peut être confus lorsque les caractères sont (ou pas) supprimés depuis le milieu. trim('abc', 'bad') supprime à la fois 'a' et 'b' car la fonction supprime 'a', puis, déplace 'b' en début de chaîne, qui sera également supprimé. Aussi, c'est la raison pour laquelle la fonction "marche" alors que trim('abc', 'b') ne fonctionne pas.

Voir aussi

  • ltrim() - Supprime les espaces (ou d'autres caractères) de début de chaîne
  • rtrim() - Supprime les espaces (ou d'autres caractères) de fin de chaîne
  • str_replace() - Remplace toutes les occurrences dans une chaîne

add a note add a note

User Contributed Notes 12 notes

up
68
Piopier
11 years ago
It may be useful to know that trim() returns an empty string when the argument is an unset/null variable.
up
41
ludko2 at gmail dot com
7 years ago
Non-breaking spaces can be troublesome with trim:

<?php
// turn some HTML with non-breaking spaces into a "normal" string
$myHTML = "&nbsp;abc";
$converted = strtr($myHTML, array_flip(get_html_translation_table(HTML_ENTITIES, ENT_QUOTES)));

// this WILL NOT work as expected
// $converted will still appear as " abc" in view source
// (but not in od -x)
$converted = trim($converted);

// &nbsp; are translated to 0xA0, so use:
$converted = trim($converted, "\xA0"); // <- THIS DOES NOT WORK

// EDITED>>
// UTF encodes it as chr(0xC2).chr(0xA0)
$converted = trim($converted,chr(0xC2).chr(0xA0)); // should work

// PS: Thanks to John for saving my sanity!
?>
up
22
jubi at irc dot pl
14 years ago
To remove multiple occurences of whitespace characters in a string an convert them all into single spaces, use this:

<?

$text
= preg_replace('/\s+/', ' ', $text);

?>

------------
JUBI
http://www.jubi.buum.pl
up
3
ivijan dot stefan at gmail dot com
9 months ago
Standard trim() functions can be a problematic when come HTML entities. That's why i wrote "Super Trim" function what is used to handle with this problem and also you can choose is trimming from the begin, end or booth side of string.
<?php
function strim($str,$charlist=" ",$option=0){
    if(
is_string($str))
    {
       
// Translate HTML entities
       
$return = strtr($str, array_flip(get_html_translation_table(HTML_ENTITIES, ENT_QUOTES)));
       
// Remove multi whitespace
       
$return = preg_replace("@\s+\s@Ui"," ",$return);
       
// Choose trim option
       
switch($option)
        {
           
// Strip whitespace (and other characters) from the begin and end of string
           
default:
            case
0:
               
$return = trim($return,$charlist);
            break;
           
// Strip whitespace (and other characters) from the begin of string
           
case 1:
               
$return = ltrim($return,$charlist);
            break;
           
// Strip whitespace (and other characters) from the end of string
           
case 2:
               
$return = rtrim($return,$charlist);
            break;
               
        }
    }
    return
$return;
}
?>
up
11
Hayley Watson
13 years ago
Another way to trim all the elements of an array
<?php
$newarray
= array_map('trim', $array);
?>
up
1
Anonymous
10 months ago
The comment of "ludko2 at gmail dot com" for trimming non-breaking spaces is wrong due the the way UTF-8 works. For example, it breaks on `"&nbsp;abà"`.
up
1
aalhad at NOSPAM dot gmail dot com
3 months ago
When specifying the character mask,
make sure that you use double quotes

<?php
  $hello
= "
      Hello World   "
; //here is a string with some trailing and leading whitespace

 
$trimmed_correct   = trim($hello, " \t\n\r"); //<--------OKAY
 
$trimmed_incorrect = trim($hello, ' \t\n\r'); //<--------NOT AS EXPECTED

 
print("----------------------------");
  print(
"TRIMMED OK:".PHP_EOL);
 
print_r($trimmed_correct.PHP_EOL);
  print(
"----------------------------");
  print(
"TRIMMING NOT OK:".PHP_EOL);
 
print_r($trimmed_incorrect.PHP_EOL);
  print(
"----------------------------".PHP_EOL);
?>

Here is the output:

----------------------------TRIMMED OK:
Hello World
----------------------------TRIMMING NOT OK:

      Hello World
----------------------------
up
0
johovich at yandex dot ru
8 months ago
trim is the fastest way to remove first and last char.

Benchmark comparsion 4 different ways to trim string with  '/'
4 functions with the same result - array exploded by '/'

<?php
$s
= '/catalog/lyustry/svet/dom-i-svet/';

$times = 100000;

print
cycle("str_preg('$s');", $times);
print
cycle("str_preg2('$s');", $times);
print
cycle("str_sub_replace('$s');", $times);
print
cycle("str_trim('$s');", $times);
print
cycle("str_clear('$s');", $times);

//print_r(str_preg2($s));

function cycle($function, $times){
   
$count = 0;
    if(
$times < 1){
        return
false;
    }
   
$start = microtime(true);
    while(
$times > $count){
        eval(
$function);
       
$count++;
    }
   
$end = microtime(true) - $start;
    return
"\n $function exec time: $end";
}

function
str_clear($s){
   
$s = explode('/', $s);
   
$s = array_filter($s, function ($s){if(!empty($s)) return true;});
    return
$s;
}

function
str_preg2($s){
   
$s = preg_replace('/((?<!.)\/(?=.))?((?<=.)\/(?!.))?/i', '', $s);
   
$s = explode('/', $s);
    return
$s;
}

function
str_preg($s){
   
$s = preg_replace('/^(\/?)(.*?)(\/?)$/i', '$2', $s);
   
$s = explode('/', $s);
    return
$s;
}

function
str_sub_replace($s){
   
$s = str_replace('/' , '' , mb_substr( $s , 0, 1)) . mb_substr( $s , 1, -1) . str_replace('/', '', mb_substr$s , -1));
   
$s = explode('/', $s);
    return
$s;
}

function
str_trim($s){
   
$s = trim($s, '/');
   
$s = explode('/', $s);
    return
$s;
}
up
0
tongcheong77 at gmail dot com
9 months ago
if you are using trim and you still can't remove the whitespace then check if your closing tag inside the html document is NOT at the next line.

<textarea class="form-control" rows="5"><?php echo trim($comment);?></textarea>

there should be no spaces at the beginning and end of your echo statement, else trim will not work as expected.
up
-2
jianglong at qiyi dot com
2 years ago
Trim full width space will return mess character,  when target string starts with '《'

@example 
echo trim("《", " ");

@return


php version 5.4.27

[EDIT by cmb AT php DOT net: it is not necessarily safe to use trim with multibyte character encodings. The given example is equivalent to echo trim("\xe3\80\8a", "\xe3\x80\x80").]
up
-16
dmr37 at cornell dot edu
12 years ago
If you want to check whether something ONLY has whitespaces, use the following:

<?php

if (trim($foobar)=='') {
   echo
'The string $foobar only contains whitespace!';
}

?>
up
-30
HW
14 years ago
You can combine character ranges and individual characters in trim()'s second argument (ditto for ltrim and rtrim). All of the specified characters and ranges will be used concurrently (i.e., if a character on either end of the string matches any of the specified charaters or character ranges, it will be trimmed). The characters and character ranges can be in any order (except of course that the character ranges need to be specified in increasing order) and may overlap.
E.g., trim any nongraphical non-ASCII character:
trim($text,"\x7f..\xff\x0..\x1f");
To Top