PHP的字符串函数整理

一、去空格或其他字符

1、trim()

删除字符串两端的空格或其他预定义字符

$value = ' jack ';
//$value = trim($value);
if( $value == 'jack' && strlen($value) ==4 ){
    echo '用户为jack';
}

2、rtrim()

删除字符串右边的空格或其他预定义字符

$value = ' jack ';
//$value = trim($value);
if( $value == 'jack' && strlen($value) ==4 ){
    echo '用户为jack';
}

3、ltrim()

删除字符串左边的空格或其他预定义字符

$value = ' jack ';
//$value = trim($value);
if( $value == 'jack' && strlen($value) ==4 ){
    echo '用户为jack';
}

4、dirname()

返回路径中的目录部分

echo dirname("c:/testweb/home.php");  //c:/testweb
echo '<br/>';
echo dirname("/testweb/home.php"); ///testweb

二、字符串生成与转化

1、str_pad()

有些时候,为了让输出看起来整齐一点,使用另一个字符串填充字符串为指定长度

#str_pad(字符串,需要补齐的目标长度,补齐用的字符,补齐的类型)

$input = "Jack";
echo str_pad($input, 10),'<br/>';                      // "Jack     "
echo str_pad($input, 10, "-=", STR_PAD_LEFT),'<br/>';  // "-=-=-Jack"
echo str_pad($input, 10, "_", STR_PAD_BOTH),'<br/>';   // "__Jack___"
echo str_pad($input, 6 , "___"); 

2、str_repeat()

重复使用指定字符串

#str_repeat(重复的字符串,重复的次数)
echo str_repeat("jack--",3);

3、str_split(需要分割的串,分割单位)

把字符串分隔到数组中

$str = 'one two three';
$arr1 = str_split($str);
$arr2 = str_split($str, 3);
echo '<pre>';
print_r($arr1);
print_r($arr2);

4、strrev()

反转字符串

echo  strrev ( "jack php!" );  // 输出 "!php kcaj"

5、wordwrap()

打断字符串为指定数量的字串

参数 描述
string 必需。规定要进行折行的字符串
width 可选。规定最大行宽度。默认是 75。
break 可选。规定作为分隔符使用的字符(字串断开字符)。默认是 "\n"。
cut 可选。规定是否对大于指定宽度的单词进行折行: FALSE - 默认No-wrap; TRUE- 折行
$text  =  "The quick brown fox jumped over the lazy dog." ;
$newtext  =  wordwrap ( $text ,  20 ,  "<br />\n" );

echo  $newtext ;

echo '<hr/>';
$text  =  "A very long woooooooooooord." ;
$newtext  =  wordwrap ( $text ,  8 ,  "\n" ,  true );

echo  " $newtext \n" ;

6、str_shuffle()

随机地打乱字符串中所有字符

$str  =  'abcdef' ;
$shuffled  =  str_shuffle ( $str );
echo $shuffled;

7、parse_str()

把查询字符串解析到变量中,主要用于页面之间传值(参数)

parse_str("name=Bill&age=60",$myArray);
print_r($myArray);

$str  =  "first=value&arr[]=foo+bar&arr[]=baz" ;
parse_str ( $str );
echo  $first ;   // value
echo  $arr [ 0 ];  // foo bar
echo  $arr [ 1 ];  // baz

parse_str ( $str ,  $output );
echo  $output [ 'first' ];   // value
echo  $output [ 'arr' ][ 0 ];  // foo bar
echo  $output [ 'arr' ][ 1 ];  // baz

三、大小写转换

1、strtolower()

2、strtoupper()

3、ucfirst()

4、ucwords

字符串每个单词首字符转为大写

$string = 'study php mysql linux apache nginx';
echo ucwords($string);

四、html标签关联

1、htmlentities()

将所有可用的字符转换成html实体

string htmlentities(string str [,int quote_style [,string charset [,boolean double_encode]]])

可选参数 quote_style 决定如何处理引号

参数 说明
ENT_COMPAT 转换双引号,忽略单引号。默认
ENT_NOQUOTES 忽略双引号和单引号
ENT_QUOTES 转换双引号和单引号
$str  =  "A 'quote' is <b>bold</b>" ;

// Outputs: A 'quote' is &lt;b&gt;bold&lt;/b&gt;
echo  htmlentities ( $str );

// Outputs: A &#039;quote&#039; is &lt;b&gt;bold&lt;/b&gt;
echo  htmlentities ( $str ,  ENT_QUOTES );

$str = "John & 'Adams'";
echo htmlentities($str, ENT_COMPAT);
echo "<br />";
echo htmlentities($str, ENT_QUOTES);
echo "<br />";
echo htmlentities($str, ENT_NOQUOTES);
/*
John &amp; 'Adams'<br />
John &amp; &#039;Adams&#039;<br />
John &amp; 'Adams' |
*/

使用htmlentities不指定编码的话遇到中文会乱码

2、htmlspecialchars()

将特殊的字符转换成html实体,一般处理UTF-8,或是内容有中文的html字词转换。

htmlspecialcharshtmlentities区别:htmlentities会转化所有html代码(包括它无法识别的中文字符)而htmlspecialchars只转换下面的字符

  • &变成&amp
  • "(双引号)变成&quot;
  • '(单引号)变成&#039;
  • < 变成&lt
  • > 变成&gt

3、nl2br()

文本中的换行符\n转换<br/>

$string = 'study php mysql linux apache nginx';
$string .= "\n";
$string .= 'study php mysql linux apache nginx';
$string .= "\n";
$string .= 'study php mysql linux apache nginx';

file_put_contents('data.txt',$string);
$str = file_get_contents('data.txt');
echo nl2br($str);

4、strip_tags()

剥去HTML、XML以及PHP的标签

5、addcslashes()

在指定的字符前添加反斜线

6、stripcslashes()

删除由addcslashes()添加的反斜线

7、addslashes()

指定预定义字符前添加反斜线

8、stripslashes

删除由addslashes()添加的转义字符

9、quotemeta()

在字符串中某些预定义的字符前添加反斜线

10、chr()

从指定的ASCII值返回字符

11、ord()

返回字符串第一个字符的ASCII值

12 sprintf()

printf()函数是将一个格式化的字符串输出到浏览器中,而sprintf()函数是返回一个格式化了的字符串.
格式化字符串可以通过转换说明,比如%s来标示标量为什么数据类型

$total = 100; 
echo "这件商品的价格是:$total";
//vs
printf("这件商品的价格是:%s",$total);
printf("这件商品的价格是:%.2f",$total);

五、字符串比较

1、strcasecmp()

不区分大小写比较两字符

$code = 'bf6jd8';
$re_code = 'BF6JD8 ';
if( !strcasecmp($code,$re_code) ){
    echo '验证码不一致';
}else{
    echo '验证码一致';
}

2、strcmp()

区分大小写比较两字符串 strcmp()函数对两个字符串进行二进制安全的比较,并区分大小写。返回值:相等(0),小于(-1),大于(1)

$pswd = 'secretpswd';
$re_pswd = 'Secretpswd';
if( strcmp($pswd,$re_pswd) != 0 ){
    echo '密码不一致';
}else{
    echo '密码一致';
}

六、字符串切割与拼接

1、chunk_split()

将字符串分成小块

2、strtok()

切开字符串

/*
strtok()  将字符串 str 分割为若干子字符串,每个子字符串以 token 中的字符分割。
这也就意味着,如果有个字符串是 "This is an example string",你可以使用空格字符将这句话分割成独立的单词。 

注意仅第一次调用 strtok 函数时使用 string 参数。
后来每次调用 strtok,都将只使用 token 参数,因为它会记住它在字符串 string 中的位置。
如果要重新开始分割一个新的字符串,你需要再次使用 string 来调用 strtok 函数,以便完成初始化工作。
注意可以在 token 参数中使用多个字符。字符串将被该参数中任何一个字符分割。
*/

$string  =  "This is\tan example\nstring" ;
 /* 使用制表符和换行符作为分界符 */
 $tok  =  strtok ( $string ,  " \n\t" );

while ( $tok  !==  false ) {
    echo  "Word= $tok <br />" ;
     $tok  =  strtok ( " \n\t" );
}

3、explode()

使用一个字符串作为标志分割另一个字符串

4、implode()

同join,将数组值用预定字符连接成字符串

5、substr()

截取字符串

string substr ( string string , int start [, int length ] )

返回字符串 stringstartlength 参数指定的子字符串。
如果 start 是负数,返回的字符串将从 string 结尾处向前数第 start 个字符开始

$rest = substr("abcdef", -1);    // 返回 "f"
$rest = substr("abcdef", -2);    // 返回 "ef"
$rest = substr("abcdef", -3, 1); // 返回 "d"

字符串查找替换

1、str_replace()

字符串替换操作,区分大小写

//普通文本替换
$html = str_replace("%var%", "black", "<body color='%var%'>");
var_dump($html);

//数组1
$replace = array("a", "e", "i", "o", "u", "A", "E", "I", "O", "U");
$string = str_replace($replace, "*", "Hello World of PHP");

//数组2
$template = '亲,您的${product}订单因${reason}已关闭,您可登录订单中心查看订单详情。如有疑问可致电${service}';

$arrData[] = '手机';
$arrData[] = '支付失败';
$arrData[] = '110';
$arrRepalce = ['${product}','${reason}','${service}'];
$message = str_replace($arrRepalce,$arrData, $template);

echo $message;

2、str_ireplace()

字符串替换操作,不区分大小写

3、substr_count()

统计一个字符串,咋另一个字符串中出现次数

4、substr_replace()

替换字符串中某串为另一个字符串

$string='jackphp';
echo substr_replace($string, '!', 3);//jac!
echo '<hr/>';
echo substr_replace($string, '^-^', 3,2);//jac^-^hp
echo '<hr/>';
echo substr_replace($string, '', 3,1);//jacphp

5、similar_text()

返回两个字符串相同字符的数量

6、strrchr()

返回一个字符串在另一个字符串中最后一次出现位置开始到末尾的字符串

7、strstr()

返回一个字符串在另一个字符串中开始位置到结束的字符串

8、stristr()

返回一个字符串在另一个字符串中开始位置到结束的字符串,不区分大小写

9、strtr()

转换字符串中的某些字符

10、strpos

寻找字符串中某字符最先出现的位置

$email = 'njz817@163.com';
$email2 = '@163.com';

var_dump(strpos($email, '@'));//6
var_dump(strpos($email2, '@'));//0

11、stripos()

寻找某字符串中某字符最先出现的位置,不区分大小写

12、strrpos()

寻找某字符串中某字符最后出现的位置

13、strripos()

寻找某字符串中某字符最后出现的位置,不区分大小写

14、strspn()

返回字符串中首次符合mask的字符串长度

15、strcspn()

返回字符串中不符合mask的字符串的长度

七、字符串统计

1、str_word_count()

统计字符串含有的单词数

2、strlen()

统计字符串长度,成功返回字符串的长度,失败呢返回的是0;

header('content-type:text/html;charset=gb2312');
$string = 'jack';
$string = '聂哥';

echo strlen($string);//gbk下4;utf-8下6

$pswd = 'secretpswd';
if( strlen($pswd) < 10 )
    echo '密码太短,不符号要求';
else
    echo '密码长度符号要求';

3、count_chars()

统计字符串中所有的字母出现次数(0..255)

//chr 返回相对应于 ascii 所指定的单个字符

$data  =  "Two Ts and one F.";

var_dump(count_chars($data)); //每个字节值作为键名,出现次数作为值的数组

var_dump(count_chars($data,1)); //但只列出出现次数大于零的字节值

var_dump(count_chars($data,2)); //但只列出出现次数等于零的字节值

var_dump(count_chars($data,3)); //.FTadenosw 所有使用了的字节值组成的字符串

var_dump(count_chars($data,4)); //.FTadenosw 所有使用了的字节值组成的字符串

八、字符串编码

4、md5()

什么叫二进制安全

二进制安全是指,在传输数据时,保证二进制数据的信息安全,也就是不被篡改、破译等,如果被攻击,能够及时检测出来