1、确定字符串长度
在php中使用strlen函数和mb_strlen函数,后者需要开启mbstring扩展
<?php
header('content-type:text/html;charset=utf-8');
$str = 'abcdef';
echo strlen($str); // 6
$str = ' ab cd ';
echo mb_strlen($str); // 7
//strlen 是计算字符串"字节"长度
//mb_strlen,是根据编码,计算字符串的"字符"个数.
$str='中华人民共和国';
//在 UTF-8编码下,一个汉字占3个字节 在gbk中一个汉字占2个字节
echo "字节长度是".strlen($str);//字节长度是21
echo "字符长度是".mb_strlen($str,'utf-8');//字符长度是7
2、字符串剔除和填充
<?php
//剔除
$str = ' i am a student ';
//剔除字符串两端空格
var_dump(trim($str));//'i am a student'
//剔除字符串尾部空格
var_dump(rtrim($str));//' i am a student'
//剔除字符串首部空格
var_dump(ltrim($str));//'i am a student '
//可以通过指定参数,实现更高级功能
var_dump(trim(',1,2,3,4,',','));//1,2,3,4
var_dump(rtrim(',1,2,3,4,',','));//,1,2,3,4
var_dump(ltrim(',1,2,3,4,',','));//1,2,3,4,
//填充
//每隔3位填充‘,’
var_dump(chunk_split('12345678',3,','));//123,456,78,
//尾部填充,如果字符串小于填充位置,则以空格补齐,如果大于填充位置,则尾部追加
var_dump(str_pad('apple', 6)."is good.");//apple is good.
var_dump(str_pad('apple123', 6)."is good.");//apple123is good.
var_dump(str_pad('app', 6)."is good.");//app is good.
3、字符串转换
<?php
$str = 'i Am a student';
//小写
var_dump(strtolower($str));//i am a student
//大写
var_dump(strtoupper($str));//I AM A STUDENT
//首字母大写
var_dump(ucfirst($str));//I Am a student
//首字母小写
var_dump(lcfirst($str));//i Am a student
每个单词首字母大写
var_dump(ucwords($str));//I Am A Student
<?php
//字符串通过==,===,!=,!== 比较
var_dump(22 == '22');//true
var_dump(22 === '222');//false
var_dump(22 != '22');//false
var_dump(22 !== '222');//true
//但是以上比较重,可能会出现很多意外
var_dump(0 == '你好');//true
var_dump(1 == '1哈哈');//true
var_dump(1 == '哈哈');//false
因此,php 字符串库函数中提供了对字符串的比较函数,它们的返回值定义为:
1):如果前者大于后者,返回大于0的数
2):如果前者小于后者,返回小于0的数
3):如果前者等于后者,返回0
<?php
$a = 'abbc';
$b = 'aBw';
//区分大小写比较
var_dump(strcmp($a, $b));//1,表示前者大于后者
//不区分大小写比较
var_dump(strcasecmp($a, $b));//-21,表示前者小于于后者
//区分大小写比较,从第三个参数给定比较长度
var_dump(strncmp($a, $b, 3));//1,表示前者大于后者
//不区分大小写比较,从第三个参数给定位比较长度
var_dump(strncasecmp($a, $b, 3));//-21,表示前者小于于后者
<?php
$str = "Hi lvfk";
//默认一个一个进行拆分
$arr1 = str_split($str);
print_r($arr1);
//Array ( [0] => H [1] => i [2] => [3] => l [4] => v [5] => f [6] => k )
//每隔3个字符拆分
$arr2 = str_split($str, 3);
print_r($arr2);
// Array ( [0] => Hi [1] => lvf [2] => k )
$str = 'abc,中国,香港,台湾';
// explode,是根据指定的分割符,把字符串拆成数组.
$arr = explode(',',$str);
print_r($arr);
//Array ( [0] => abc [1] => 中国 [2] => 香港 [3] => 台湾 )
// implode,是根据指定的连接符,把数组再拼接成字符串,也可以使用join
$arr = explode(',',$str);
echo implode('~',$arr),'<br />';//abc~中国~香港~台湾
// 你可以只传一个数组做参数,不指定连接符,
// 这样,将把数组单元直接拼接起来
echo implode($arr);//abc中国香港台湾
<?php
$str = "Hello fri3nd, HI, HI,hi,you're looking good today!";
//字符串翻转
var_dump(strrev($str));//!yadot doog gnikool er'uoy,ih,IH ,IH ,dn3irf olleH
<?php
$str = "Hello fri3nd, you're looking good today!";
print_r(str_word_count($str, 1));
//Array ( [0] => Hello [1] => fri [2] => nd [3] => you're [4] => looking [5] => good [6] => today )
7、查找
<?php
$str = "Hello fri3nd, HI, HI,you're looking good today!";
//strstr & stristr 查找,并返回查找成功位置后的所有字符串
//strstr区分大小写
var_dump(strstr($str, 'y'));//you're looking good today!
var_dump(strstr($str, 'A'));//false,此处查找失败
//stristr忽略大小写查找
var_dump(stristr($str, 'A'));//ay!
//strpos & stripos 查找位置,并返回查找成功的位置
//strpos区分大小写
var_dump(strpos($str, 'you'));//23
var_dump(strpos($str, 'hi'));//false,此处查找失败
//stripos不区分大小写
var_dump(stripos($str, 'HI'));//14
//strrpos 最后一次出现位置
var_dump(strrpos($str, 'HI'));//18
//strripos 最后一次出现位置,不区分大小写
var_dump(strripos($str, 'HI'));//18
8、字符串替换
<?php
$str = "Hello fri3nd, HI, HI,you're looking good today!";
//str_replace,替换,大小写敏感
var_dump(str_replace('hi', '#', $str));//Hello fri3nd, HI, HI,you're looking good today!
var_dump(str_replace('HI', '#', $str));//Hello fri3nd, #, #,you're looking good today!
//sub_replace 指定位置开始替换
//从字符串$str,第二个位置开始替换,并替换全部
var_dump(substr_replace($str, '#', 2));//He#
//从字符串$str,第二个位置开始替换,并且只替换2个字符
var_dump(substr_replace($str, '#', 2,2));//He#o fri3nd, HI, HI,you're looking good today!
substr_count,substr_compare,substr_replace
<?php
$str = "Hello fri3nd, HI, HI,hi,you're looking good today!";
//截取
var_dump(substr($str,0,5));//Hello
var_dump(substr($str,5));// fri3nd, HI, HI,hi,you're looking good today!
//统计出现次数,大小写敏感
var_dump(substr_count($str, 'HI'));//2
//针对中文截取,可以使用mb_substr
var_dump(mb_substr('你好,中国', 0,2));
//substr_compare() 函数从指定的开始位置比较两个字符串。
echo substr_compare("abcde", "bc", 1, 2); // 0
echo substr_compare("abcde", "de", -2, 2); // 0
echo substr_compare("abcde", "bcg", 1, 2); // 0
echo substr_compare("abcde", "BC", 1, 2, true); // 0
echo substr_compare("abcde", "bc", 1, 3); // 1
echo substr_compare("abcde", "cd", 1, 2); // -1
echo substr_compare("abcde", "abc", 5, 1); // warning
//substr_replace() 函数把字符串的一部分替换为另一个字符串。
$var = 'ABCDEFGH:/MNRPQR/';
echo "Original: $var<hr />\n";
/* These two examples replace all of $var with 'bob'. */
echo substr_replace($var, 'bob', 0) . "<br />\n";
echo substr_replace($var, 'bob', 0, strlen($var)) . "<br />\n";
/* Insert 'bob' right at the beginning of $var. */
echo substr_replace($var, 'bob', 0, 0) . "<br />\n";
/* These next two replace 'MNRPQR' in $var with 'bob'. */
echo substr_replace($var, 'bob', 10, -1) . "<br />\n";
echo substr_replace($var, 'bob', -7, -1) . "<br />\n";
/* Delete 'MNRPQR' from $var. */
echo substr_replace($var, '', 10, -1) . "<br />\n";
10、其他常用字符串函数
<?php
//ip字符串和长整型之间转换
var_dump(ip2long('127.0.0.1'));//2130706433
var_dump(long2ip(2130706433));//127.0.0.1
//md5:将一个字符串进行MD5算法加密
var_dump(md5('123'));//202cb962ac59075b964b07152d234b70
//md5_file — 将一个文件进行MD5算法加密
var_dump(md5(__FILE__));//a544327e3f2d2bd40ed09eb00ef90338
//bin2hex - 将二进制数据转换成十六进制表示
var_dump(bin2hex('a'));//61
//nl2br — 将字符串中的换行符“\n”替换成“<br/>”
var_dump(nl2br("hi \n nih"));//hi <br />nih
11、应用:多种方式获取路径后缀
<?php
$url="http://localhost/user/order.php";
function get_ext1($url){
return substr(strrchr($url,"."),1);
}
function get_ext2($url){
$p=pathinfo($url);//Array ( [dirname] => http://localhost/user [basename] => order.php [extension] => php [filename] => order )
return $p['extension'];
}
function get_ext3($url){
return substr($url,strrpos($url,'.')+1);
}
function get_ext4($url){
$arr=explode('.',$url);
return array_pop($arr);
}
function get_ext5($url){
return pathinfo($url,PATHINFO_EXTENSION);
}
echo get_ext1($url).'<br/>';
echo get_ext2($url).'<br/>';
echo get_ext3($url).'<br/>';
echo get_ext4($url).'<br/>';
echo get_ext5($url).'<br/>';