It may be useful to know that trim() returns an empty string when the argument is an unset/null variable.
(PHP 4, PHP 5, PHP 7)
trim — Strip whitespace (or other characters) from the beginning and end of a string
$str
[, string $character_mask = " \t\n\r\0\x0B"
] )
This function returns a string with whitespace stripped from the
beginning and end of str.
Without the second parameter,
trim() will strip these characters:
strThe string that will be trimmed.
character_mask
Optionally, the stripped characters can also be specified using
the character_mask parameter.
Simply list all characters that you want to be stripped. With
.. you can specify a range of characters.
The trimmed string.
Example #1 Usage example of 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);
// trim the ASCII control characters at the beginning and end of $binary
// (from 0 to 31 inclusive)
$clean = trim($binary, "\x00..\x1F");
var_dump($clean);
?>
The above example will output:
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"
Example #2 Trimming array values with 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);
?>
The above example will output:
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"
}
Note: Possible gotcha: removing middle characters
Because trim() trims characters from the beginning and end of a string, it may be confusing when characters are (or are not) removed from the middle. trim('abc', 'bad') removes both 'a' and 'b' because it trims 'a' thus moving 'b' to the beginning to also be trimmed. So, this is why it "works" whereas trim('abc', 'b') seemingly does not.
It may be useful to know that trim() returns an empty string when the argument is an unset/null variable.
Non-breaking spaces can be troublesome with trim:
<?php
// turn some HTML with non-breaking spaces into a "normal" string
$myHTML = " 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);
// 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!
?>
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
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").]
Another way to trim all the elements of an array
<?php
$newarray = array_map('trim', $array);
?>
This function trims regular expressions from strings.
<?php
function preg_trim( $string, $pattern ) {
$pattern = array( "/^" . $pattern . "*/", "/" . $pattern . "*$/" );
return preg_replace( $pattern, "", $string );
}
?>
The following example outputs "Hello, world":
<?php
$hello = " ...%20Hello, world!";
echo preg_trim( $hello, "[^a-zA-Z]" );
?>
Windows uses two characters for definining newlines, namely ASCII 13 (carriage return, "\r") and ASCII 10 (line feed, "\n") aka CRLF. So if you have a string with CRLF's, trim() won't recognize them as being one newline. To solve this you can use str_replace() to replace the CRLF's with with a space or something.
<?php
// string with bunch of CRLF's
$my_string = "Liquid\r\nTension Experiment\r\n\r\n\r\n";
// replace CRLF's with spaces
$my_wonderful_string = str_replace("\r\n", " ", $my_string);
// would result in "Liquid Tension Experiment "
// or just delete the CRLF's (by replacing them with nothing)
$my_wonderful_string = str_replace("\r\n", "", $my_string);
// would result in "LiquidTension Experiment"
?>
To show off the empty positions in a string by means of trim():
<?php
$string = " Hello World! ";
echo $string;
echo " Has : ".strlen($string)." letter(s). One by one according to the following:<br />";
echo "<br />".$rightt = strlen(ltrim($string)) - strlen(trim($string))." empty position(s) from right.";
echo "<br />".$leftt = strlen(rtrim($string)) - strlen(trim($string))." empty position(s) from left.<br />";
$length = strlen($string);
for($x = 0; $x < $length; $x++){
$letter = substr($string, $x, 1);
if($letter <> " ")
echo "<br />Position $x ===> ".substr($string, $x, 1);
else
echo "<br />Position $x ===> Empty";
}
?>
the output is:
Hello World! Has : 19 letter(s). One by one according to the following:
3 empty position(s) from right.
4 empty position(s) from left.
Position 0 ===> Empty
Position 1 ===> Empty
Position 2 ===> Empty
Position 3 ===> Empty
Position 4 ===> H
Position 5 ===> e
Position 6 ===> l
Position 7 ===> l
Position 8 ===> o
Position 9 ===> Empty
Position 10 ===> W
Position 11 ===> o
Position 12 ===> r
Position 13 ===> l
Position 14 ===> d
Position 15 ===> !
Position 16 ===> Empty
Position 17 ===> Empty
Position 18 ===> Empty
A simple function to clear extra white spaces along a string.
<?php
function TrimStr($str)
{
$str = trim($str);
for($i=0;$i < strlen($str);$i++)
{
if(substr($str, $i, 1) != " ")
{
$ret_str .= trim(substr($str, $i, 1));
}
else
{
while(substr($str,$i,1) == " ")
{
$i++;
}
$ret_str.= " ";
$i--; // ***
}
}
return $ret_str;
}
?>
[EDIT BY danbrown AT php DOT net: Contains a fix provided by (info AT deep-soft DOT com) to address the issue where "it deletes the first char after spaces (because of while)."]
If you want to check whether something ONLY has whitespaces, use the following:
<?php
if (trim($foobar)=='') {
echo 'The string $foobar only contains whitespace!';
}
?>
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");
On my application I had several users submit what to me appeared as "empty strings", whereas in fact they were submitting the ­ character.
Trim, by default, does not strip this character (Though arguably it should). The following code strips this character from your input:
<?php
// As the ­ character is invisible we'll simply use the ASCII numeric representation, and decode via chr():
$string = trim($string, chr(173));
// If you wish to strip all occurences this will work:
$string = str_replace(chr(173), "", $string);
?>
Gerard
Trim will generate a warning is you try to trim an empty string if this is a problem for you can test with is_string