主要包括以下方面:
用来清理字符串的空格,如果要将字符串存入文件或者数据库,或者与其它字符串进行比较,就需要先清理空格。
例如:$name = trime($_POST['name']);
string trim ( string $str
[, string $charlist
] ) //函数trim的原型
trim函数默认是去除空格的,但是第二个参数可以指定一个需要过滤的字符列表,例如:
$trimmed = trim($hello, 'HdWr');
该函数将字符串中的换行符替换成HTML的<br>,以便在浏览器中显示
int print ( string
$arg
);//和echo()相同,只不过有返回值(true表示成功)
int printf ( string
$format
[, mixed$args
[, mixed$...
]] );//将格式化的字符串输出到浏览器
string sprintf ( string
$format
[, mixed$args
[, mixed$...
]] );//返回一个格式化了的字符串(内存格式化字符串)
使用printf和sprintf可以完全替代number_format,比如格式字符串中用%.2f,可以格式化2位小数
格式化字符串的格式:
%['填充字符][-][宽度][.精度]类型
如果想打印%,需要使用“%%”转换;
以下是格式化的类型码:
类型 | 意义 |
b | 解释为整数,并作为二进制输出 |
c | 解释为整数,并作为字符输出 |
d | 解释为整数,并作为小数输出 |
f | 解释为双精度,并作为浮点数输出 |
o | 解释为整数,并作为八进制输出 |
s | 解释为字符串,并作为字符串输出 |
u | 解释为整数,并作为非指定小数输出 |
x | 解释为整数,并作为带有小写字母a~f的十六进制输出 |
X | 解释为整数,并作为带有小写字母A~F的十六进制输出 |
注意:参数顺序和转换说明顺序不一定相同,比如%2\$.2f,就是用列表的第二个参数来替换该格式码
有更好用的两个函数,它不接受参数列表,而是接受一个数组:
int vprintf ( string
$format
, array$args
)
string vsprintf ( string
$format
, array$args
)
比如:
<?php print vsprintf("%04d-%02d-%02d", explode('-', '1988-8-1')); // 1988-08-01 ?>
如果将字符串存入数据库,以下几个字符串中的字符会被解释成控制符,从而引发问题:
解决方法,是在这三类字符前面,加上转义字符\,变成了[\", \', \\, \NULL]
PHP提供了两个专门用于转义字符串的函数:
string addslashes ( string
$str
)//为特殊字符加上转义字符\string stripcslashes ( string
$str
)//与前者想法,它去掉转义字符
比如:
<?php $str = "Is your name O'reilly?"; // Outputs: Is your name O\'reilly? echo addslashes($str); ?>
注意:如果服务器开启了magic_quotes_gpc选项,GET、POST和COOKIE数组的变量自动被包括在引号内,显示的时候如果不正常,可以用stripcslashes 去掉引号就可以了。可以用get_magic_quotes_gpc()函数来检查该变量是否被打开。
array explode ( string
$delimiter
, string$string
[, int$limit
] )
该函数使用定界符分割字符串,返回子字符串的数组,limit限制分成字符串块的数量
<?php $str = 'one|two|three|four'; // positive limit print_r(explode('|', $str, 2)); // negative limit (since PHP 5.1) print_r(explode('|', $str, -1)); ?>
结果:
Array ( [0] => one [1] => two|three|four ) Array ( [0] => one [1] => two [2] => three )
而implode和join完成同样的功能,就是提供一个定界符,把数组合并成一个字符串:
string implode ( string
$glue
, array$pieces
)
例如:
<?php $array = array('lastname', 'email', 'phone'); $comma_separated = implode(",", $array); echo $comma_separated; // lastname,email,phone // Empty string when using an empty array: var_dump(implode('hello', array())); // string(0) "" ?>
string strtok ( string
$str
, string$token
)
分隔符可以使字符串或者字符,如果是字符串,也当成字符的组合来处理:
<?php $string = "This is\tan example\nstring"; /* Use tab and newline as tokenizing characters as well */ $tok = strtok($string, " \n\t"); while ($tok !== false) { echo "Word=$tok<br />"; $tok = strtok(" \n\t"); } ?>
注意:分割是根据字符来进行,而不是字符串
string substr ( string
$string
, int$start
[, int$length
] )
有点解释不清楚,下面有例子,一看就明白了:
$rest = substr("abcdef", -1); // returns "f" $rest = substr("abcdef", -2); // returns "ef" $rest = substr("abcdef", -3, 1); // returns "d" $rest = substr("abcdef", 0, -1); // returns "abcde" $rest = substr("abcdef", 2, -1); // returns "cde" $rest = substr("abcdef", 4, -4); // returns false $rest = substr("abcdef", -3, -1); // returns "de" echo substr('abcdef', 1); // bcdef echo substr('abcdef', 1, 3); // bcd echo substr('abcdef', 0, 4); // abcd echo substr('abcdef', 0, 8); // abcdef echo substr('abcdef', -1, 1); // f
int strcmp ( string
$str1
, string$str2
)
int strcasecmp ( string
$str1
, string$str2
)
int strnatcmp ( string
$str1
, string$str2
)int strncasecmp ( string
$str1
, string$str2
, int$len
)
int strlen ( string
$string
)
string strstr ( string
$haystack
, mixed$needle
[, bool$before_needle
= false ] )
第三个参数如果为TRUE,返回找到的串前面的部分;默认返回后面的部分;找不到返回false;
<?php $email = '[email protected]'; $domain = strstr($email, '@'); echo $domain; // prints @example.com $user = strstr($email, '@', true); // As of PHP 5.3.0 echo $user; // prints name ?>
string strrchr ( string
$haystack
, mixed$needle
)
// get last directory in $PATH $dir = substr(strrchr($PATH, ":"), 1);
函数strpos()和strrpos()和strstr()类似,但是返回的不是子字符串,而是返回字符串在目标串的位置。
int strpos ( string
$haystack
, mixed$needle
[, int$offset
= 0 ] )
如果offset为非0,那么就会从offset开始的地方开始搜索子串,注意,因为找不到会返回false,这和PHP的0是相等的,也就是第一个字符,因此比较的时候,要用全比较===:
<?php $mystring = 'abc'; $findme = 'a'; $pos = strpos($mystring, $findme); // Note our use of ===. Simply == would not work as expected // because the position of 'a' was the 0th (first) character. if ($pos === false) { echo "The string '$findme' was not found in the string '$mystring'"; } else if ($pos !== false){ echo "The string '$findme' was found in the string '$mystring'"; echo " and exists at position $pos"; } ?>
mixed str_replace ( mixed
$search
, mixed$replace
, mixed$subject
[, int&$count
] )
<?php // Provides: <body text='black'> $bodytag = str_replace("%body%", "black", "<body text='%body%'>"); // Provides: Hll Wrld f PHP $vowels = array("a", "e", "i", "o", "u", "A", "E", "I", "O", "U"); $onlyconsonants = str_replace($vowels, "", "Hello World of PHP"); // Provides: You should eat pizza, beer, and ice cream every day $phrase = "You should eat fruits, vegetables, and fiber every day."; $healthy = array("fruits", "vegetables", "fiber"); $yummy = array("pizza", "beer", "ice cream"); $newphrase = str_replace($healthy, $yummy, $phrase); // Provides: 2 $str = str_replace("ll", "", "good golly miss molly!", $count); echo $count; ?>
mixed substr_replace ( mixed
$string
, mixed$replacement
, mixed$start
[, mixed$length
] )
replacement
<?php $var = 'ABCDEFGH:/MNRPQR/'; echo "Original: $var<hr />\n"; /* 下面两个替换,将整个串替换成bob */ echo substr_replace($var, 'bob', 0) . "<br />\n"; echo substr_replace($var, 'bob', 0, strlen($var)) . "<br />\n"; /* 下面的例子相当于插入了bob在字符串的开始 */ echo substr_replace($var, 'bob', 0, 0) . "<br />\n"; /* 以下两个替换了'MNRPQR'成bob */ echo substr_replace($var, 'bob', 10, -1) . "<br />\n"; echo substr_replace($var, 'bob', -7, -1) . "<br />\n"; /* 相当于删除了'MNRPQR' */ echo substr_replace($var, '', 10, -1) . "<br />\n"; ?>