文字

trim

(PHP 4, PHP 5)

trim去除字符串首尾处的空白字符(或者其他字符)

说明

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

此函数返回字符串 str 去除首尾空白字符后的结果。如果不指定第二个参数, trim() 将去除这些字符:

  • " " (ASCII 32 (0x20)),普通空格符。
  • "\t" (ASCII 9 (0x09)),制表符。
  • "\n" (ASCII 10 (0x0A)),换行符。
  • "\r" (ASCII 13 (0x0D)),回车符。
  • "\0" (ASCII 0 (0x00)),空字节符。
  • "\x0B" (ASCII 11 (0x0B)),垂直制表符。

参数

str

待处理的 字符串

charlist

可选参数,过滤字符也可由 charlist 参数指定。一般要列出所有希望过滤的字符,也可以使用 “..” 列出一个字符范围。

返回值

过滤后的字符串。

更新日志

版本 说明
4.1.0 新增可选的 charlist 参数。

范例

Example #1 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 );

// 清除 $binary 首位的 ASCII 控制字符
// (包括 0-31)
$clean  trim ( $binary "\x00..\x1F" );
var_dump ( $clean );

?>

以上例程会输出:

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(14) "Example string"

Example #2 使用 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 );

?>

以上例程会输出:

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.

参见

  • ltrim() - 删除字符串开头的空白字符(或其他字符)
  • rtrim() - 删除字符串末端的空白字符(或者其他字符)
  • str_replace() - 子字符串替换

用户评论:

[#1] dik_allison at msn dot com [2015-07-14 12:33:05]

Just for reference, using trim on a string which only contains blank characters returns an empty string, not ' '.
i.e. strlen(trim('    ')) is 0

[#2] jianglong at qiyi dot com [2015-05-13 08:09:04]

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").]

[#3] david at rayninfo dot co dot uk [2014-10-07 10:44:11]

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

[#4] tomdudman at gmail dot com [2014-01-13 14:33:17]

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]" );
?>

[#5] syn-attack at devilzc0de dot org [2013-02-02 13:10:42]

I think this is my implementation of trim...

<?php
    

    
function __trim($str$charlist '') {
        
$result '';
        

        
$forbidden_list = array(" ""\t""\r""\n""\0""\x0B");
        
        if (empty(
$charlist)) {
            for (
$i 0$i strlen($str); $i++) {
                if ((
$str[$i] != $forbidden_list[0]) &&
                    (
$str[$i] != $forbidden_list[1]) &&
                    (
$str[$i] != $forbidden_list[2]) &&
                    (
$str[$i] != $forbidden_list[3]) &&
                    (
$str[$i] != $forbidden_list[4]) &&
                    (
$str[$i] != $forbidden_list[5])) {
                    
$result .= $str[$i];
                }
            }
        }
        else if (!empty(
$charlist)) {
            
$is_not_same true;
            
            for (
$i 0$i strlen($str); $i++) {
                for (
$j 0$j strlen($charlist); $j++) {
                    if (
$str[$i] != $charlist[$j]) {
                        
$is_not_same true;
                    }
                    else if (
$str[$i] == $charlist[$j]) {
                        
$is_not_same false;
                        break;
                    }
                }
                
                if (
$is_not_same == true) {
                    
$result .= $str[$i];
                }
            }
        }
        
        return (
$result);
    }
    
    
$str "Paulus Gandung Prakosa";
    echo 
__trim($str);
?>

[#6] seyednaser at gmail dot com [2012-08-28 07:49:34]

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$x1);
        if(
$letter <> " ")
            echo 
"<br />Position&nbsp;&nbsp; $x ===> &nbsp;&nbsp;".substr($string$x1);
        else
            echo 
"<br />Position&nbsp;&nbsp; $x ===> &nbsp;&nbsp; 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

[#7] gerjoo at gmail dot com [2011-06-03 08:38:37]

On my application I had several users submit what to me appeared as "empty strings", whereas in fact they were submitting the &shy; 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 &shy; character is invisible we'll simply use the ASCII numeric representation, and decode via chr():
$string trim($stringchr(173));

// If you wish to strip all occurences this will work:
$string str_replace(chr(173), ""$string);

?>


Gerard

[#8] ludko2 at gmail dot com [2010-07-09 02:28:06]

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($myHTMLarray_flip(get_html_translation_table(HTML_ENTITIESENT_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!
?>

[#9] josecruz at josecruz dot com dot br [2008-11-21 17:50:57]

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$i1) != " ")
        {

            
$ret_str .= trim(substr($str$i1));

        }
        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)."]

[#10] Piopier [2007-01-12 06:06:01]

It may be useful to know that trim() returns an empty string when the argument is an unset/null variable.

[#11] dmr37 at cornell dot edu [2005-05-17 12:47:45]

If you want to check whether something ONLY has whitespaces, use the following:

<?php

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

?>

[#12] Hayley Watson [2005-02-07 16:46:46]

Another way to trim all the elements of an array
<?php
$newarray 
array_map('trim'$array);
?>

[#13] jubi at irc dot pl [2004-04-20 06:48:22]

To remove multiple occurences of whitespace characters in a string an convert them all into single spaces, use this:

<?php

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

?>


------------
JUBI
http://www.jubi.buum.pl

[#14] HW [2003-06-05 18:32:56]

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");

[#15] tbm.at.home.dot.nl [2002-03-14 11:30:22]

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"
?>

上一篇: 下一篇: