haystack:干草堆,指定从哪个字符串中进行搜索
needle:指针,指定搜索的工具
汉字:gb2312字符集是两个字符 utf-8字符集是三个字节

字符串中一个空格是一个字节, 两个空格是二个字节
字符串处理函数 strstr() strpos() substr()
stristr stripos 不区分大小写
strrchr strrpos 从末了一次涌现的位置
strchr()是strstr()的别名, PHP没有供应strrstr()函数
<?php$fileName = "wuqi.jpg";echo strrchr($fileName, "."); //输出.jpg?>
strstr() 函数搜索一个字符串在另一个字符串中的第一次涌现, 该字符串返回别的部分(从匹配点)
string strstr ( string haystack, string needle)
haystack 必要参数, 指定从哪个字符串中进行搜索
needle 必要参数, 指定搜索的工具。如果该参数是一个数值, 那么将搜索与这个数值的ASCII值相匹配的字符
<?phpecho strstr("mircosoft","s"); //输出softecho strstr("12563456","6"); //输出63456echo strstr("广东科技","科"); //输出科技?>
strpos() 函数返回字符串在另一个字符串中第一次涌现的位置, 如果没找到 needle, 将返回FALSE。
mixed strpos(string haystack,string needle,int offset)
<?php$newstring = 'abcdef abcdef' ;$pos = strpos ( $newstring , 'a' , 1 ); // $pos = 8, 两个空格是两个字节echo $pos;?>
实例:
if(!strpos("/upload/icon/BTC.png", "upload")){ //如果不存在upload$data['img'] = "/upload/".$data['img'];}
编写自定义函数
/ 查询字符是否存在于某字符串 @param $haystack 字符串 @param $needle 要查找的字符 @return bool/function str_exists($haystack, $needle){return !(strpos($haystack, $needle) === FALSE);}$str = "program_superadmin";if(str_exists("program_superadmin", "program_")){echo "存在";}else{echo "不存在";}
substr() 函数返回字符串的一部分。
string substr(string str,int start,[int length])
length为负数时, length长度变成offset形式(字符串位置),
<?php$test = "Your customer service is excellent";echo substr($test, 6, -14); //输出:ustomer servic?>
把稳:start取出的字符串的位置包含本身
length如果为负数,则不包含本身的字符串
如何去除末了一个字符?
echo substr("spqmd", 0, -1); // 返回值 spqm
在运用substr()函数对中笔墨符串进行截取时,牢记页面编码格式字符集utf-8(中文三个字节)和gb2312(中文两个字节)编码格式,
否则利用iconv_substr()函数进行截取
把稳:GB2312编码格式下substr()截取中文不涌现乱码的条件是substr()函数传入的第二个参数和第三个参数同时为偶数,就不会涌现乱码
而utf-8编码格式下substr()函数不涌现乱码的条件是substr()函数所截取的范围要完全截取单个中文(一个中文汉字是三个字节),
substr()函数截取中文的乱码是局部乱码(涉及单个汉字乱码),这与编码格式禁绝确而涌现整体乱码是有差异的;
因此substr不适宜截取中笔墨符串,应该编写自定义函数,详细可以参考php|自定义函数库|办理用substr()函数对中笔墨符串截取时乱码
当然推举利用iconv_substr()和mb_substr()函数截取中笔墨符串, 但mb_substr()函数效率高一些;
string iconv_substr ( string $str , int $offset [, int $length = iconv_strlen($str, $charset)
[, string $charset = ini_get("iconv.internal_encoding") ]] )
iconv_substr()函数实例:
<?php$str= 'guanghshs广水h fsgs!';echo '<br />';echo iconv_substr($str, 1, 12,"utf-8"); //第四个参数要与文件保存的编码格式同等?>
也可用于gb2312编码格式
<?php$str= 'guanghshs广水h fsgs!';echo '<br />';echo iconv_substr($str, 1, 12,"gb2312"); //第四个参数要与文件保存的编码格式同等?>
iconv_substr()函数基于charset检测到的字符集进行统计打算,而相对应的substr()函数则是基于字节的位移来打算。
实例:获取URL中的文件名称
<?phpfunction getFileName($url){$location = strrpos($url,"/")+1;$fileName = substr($url,$location);return $fileName;}echo getFileName("http://bbs.xxxxxx.net/index.php");echo getFileName("http://bbs.xxxxxx.com/images/Sharp/logo.gif");echo getFileName("file:///C:/windows/php.ini");?>
substr_count() 函数打算子串在字符串中涌现的次数。
int substr_count ( string $haystack , string $needle [, int $offset [, int $length ]] )
haystack 指定在哪个字符串中进行查找
needle 指定要查找的字符
<?phpecho substr_count("PHP函数参考大全,PHP范例宝典,PHP完备手册","PHP");?>
本示例的运行结果为:3。
处理中笔墨符
对付以上的字符串函数,有些可以用于中文,但有些却不适用中文。
以是, PHP 供应了专门的函数来办理这样的问题。
中笔墨符集可以是 gbk,utf8,gb2312
mb_strlen () 对应的函数为 strlen() 求字符串的长度
mb_strstr() 对应的函数为 strstr() 求某字符串到结尾的字符
mb_strpos() 对应的函数为 strpos() 求出字符最先涌现处
mb_substr() 对应的函数为 substr() 取出指定的字符串
mb_substr_count() 对应函数为 substr_str() 返回字符串涌现的次数
iconv() 字符串按哀求的字符编码来转换
iconv_strlen() 对应的函数为 strlen() 求字符串的长度
iconv_strpos() 对应的函数为 strpos() 求出字符最先涌现处
iconv_substr() 对应的函数为 substr() 求某字符串到结尾的字符
iconv_strrpos()对付的函数为 substr() 查找字符串在一个字符串中末了涌现的位置
substr_replace() 将字符串中的部分字符串更换为指定的字符串。
string substr_replace(string str,string replace,int start,int length)
start:
如果 start 为正数, 更换将从 string 的 start 位置开始。
如果 start 为负数, 更换将从 string 的倒数第 start 个位置开始。
length:
如果设定了这个参数并且为正数,表示 string 中被更换的子字符串的长度。
如果设定为负数, 它表示待更换的子字符串结尾处间隔 string 末端的字符个数。
如果没有供应此参数, 那么它默认为 strlen( string ) (字符串的长度)。
当然, 如果 length 为 0, 那么这个函数的功能为将 replacement 插入到 string 的 start 位置处。
<?php
echo substr_replace("Hello world","earth",6); //输出Hello earth
echo substr_replace("mircosoft","mir",0,2); //输出mingrisoft
?>
str_replace() 函数利用一个字符串更换字符串中的另一些字符。
mixed str_replace ( mixed search, mixed replace, mixed subject , int &count )
返回值为更换后的结果
search 指定将要被更换的字符串
replace 指定更换所利用的字符串
subject 指定被操作的字符串
&count 更换字符串实行的次数
<?php$str = "广东XXX科技";$str1 = array("XXX软件", "XXX图书", "XXX论坛");$str2 = array("YYY");$strs = str_replace($str2, $str, $str1);print_r($str1); //输出更换前的结果print_r($strs); //输出更换后的结果$str = str_replace("mirsoft", "广东XXX科技有限公司", "Welcome to mircosoft!", $count);echo "Welcome to mirsoft!";echo $str; //输出更换后的结果echo $count; //输出更换字符的次数?>
str_replace() 区分大小写
str_ireplace() 不区分大小写
str_split() 函数把字符串分割到数组中
array str_split ( string string , int split_length)
string 指定字符串工具
split_length 可选参数,指定每个数组元素的长度。如果长度小于1,则返回false;如果指定长度大于字符串的长度,
则全体字符串以单个元素的形式返回
<?php$str = "Hello Friend";$arr1 = str_split($str);$arr2 = str_split($str, 3);print_r($arr1);print_r($arr2);?>
Array([0] => H[1] => e[2] => l[3] => l[4] => o[5] =>[6] => F[7] => r[8] => i[9] => e[10] => n[11] => d)Array([0] => Hel[1] => lo[2] => Fri[3] => end)
ord() 返回字符串 string 第一个字符的 ASCII 码值。
int ord ( string $string )
该函数是 chr() 的互补函数
string chr ( int $ascii )
返回相对应于 ascii 所指定的单个字符。
$str = "mingtianweilai来日";for($i = 0; $i < strlen($str); $i ++) {if(ord(substr($str,$i,1))>0xa0){ //判断汉字$tmpstr .= substr ( $str, $i, 2 ); //适宜用于gb2312编码$i++;}}
ASCII码表:http://www.asciima.com/
substr()
substr_replace()
把稳: 以上涉及截取中笔墨符串随意马虎涌现乱码的函数
实例:
编写不包括匹配点截取字符串的自定义函数
function sub_str($str, $sign){ $pos = strrpos($str, $sign); //从末了一次涌现的位置 return substr($str, $pos+1);}$str = "湖北省-荆州市-沙市区";echo sub_str($str, "-"); //沙市区
实例:
利用正则表达式截取字符串
<?php$str = "备份-moodle2-course-22-etl数据整合与预处理-20190604-1531-nu.mbz";echo preg_replace('/^(.)+course\-(\d)+\-/', '', $str)); //etl数据整合与预处理-20190604-1531-nu.mbz?>