• (五)字符串——PHP


    第五章 字符串

    1 字符串的定义

    字符串的显示可以使用echo()函数print()函数,print()函数具有返回值,返回1;而echo()函数则没有,所以echo()函数比print()函数要快一些,也正是因为这个原因,print()函数能应用于复合语句中,而echo()函数则不能。

    
        $return=print "test";       // 输出"test"
        echo $return;            	// 输出1
    
    // echo()函数可以一次输出多个字符串,而print()函数则不可以
    echo "I", "love", "PHP";        	//输出"IlovePHP"
    print "I", "love", "PHP";        	//将提示错误
    
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2 字符串的格式化

    printf()函数将一个通过替换值建立的字符串输出到格式字符串中,这个命令和C语言中的printf()函数结构和功能一致。语法格式如下:

    int printf(string $format [ , mixed $args])
    
    • 1

    第一个参数 f o r m a t 是 格 式 字 符 串 , format是格式字符串, formatargs是要替换的值,格式字符串里的字符“%”指出了一个替换标记。

    格式字符串中的每一个替换标记都由一个百分号组成,后面可能跟有一个填充字符、一个对齐方式字符、字段宽度和一个类型说明符。字符串的类型说明符为“s”。例如:

    
        //显示字符串
        $str="hello";
        printf("%s\n",$str);     		//输出"hello"并回车
        printf("%010s\n",$str); 		//在字符串前补0,将字符串补成10位
    
        //显示数字
        $num=10;
        printf("%d",$num); 		//输出10
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    3 常用的字符串函数

    3.1 计算字符串的长度

    在操作字符串时经常需要计算字符串的长度,这时可以使用strlen()函数,语法格式:

    int strlen(string $string)
    
    • 1

    该函数返回字符串的长度,1个英文字母长度为1个字符,1个汉字长度为3个字符,字符串中的空格也算一个字符。例如:

    
        $str1="hello ";
        echo strlen($str1);                    	//输出6
    
        $str2="中国";
        echo strlen($str2);                    	//输出6
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    3.2 将字符串改变大小写

    使用strtolower()函数可以将字符串全部转化为小写,使用strtoupper()函数将字符串全部转化为大写。例如:

    
        echo strtolower("HelLO,WoRlD");         	//输出"hello,world"
        echo strtoupper("hEllo,wOrLd");          	//输出"HELLO,WORLD"
    ?>
    
    • 1
    • 2
    • 3
    • 4

    使用ucfirst()函数可以将字符串的第一个字符改成大写,使用lcfirst()函数可以将字符串的第一个字符改成小写,使用ucwords()函数可以将字符串中每个单词的第一个字母改成大写。例如:

    
        echo ucfirst("hello world");              	//输出"Hello world"
        echo lcfirst("HelloWorld");              	//输出"helloWorld"
        echo ucwords("how are you");            	//输出"How Are You"
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    3.3 字符串裁剪

    实际应用中,字符串经常被读取,以及用于其他函数的操作。当一个字符串的首和尾有多余的空白字符,如空格、制表符等,参与运算时就可能产生错误的结果,这时可以使用trim、rtrim、ltrim()函数来解决。它们的语法格式如下:

    string trim(string $str [, string $charlist ])
    string rtrim(string $str [, string $charlist ])
    string ltrim(string $str [, string $charlist ])
    
    • 1
    • 2
    • 3

    ltrim()、rtrim()、trim()函数分别用于删除字符串 s t r 中 最 左 边 、 最 右 边 和 两 边 的 与 str中最左边、最右边和两边的与 strcharlist相同的字符,并返回剩余的字符串。例如:

    
        $str1="  hello   ";
        echo trim($str1);                        	//输出"hello"
    
        $str2="aaahelloa";
        echo ltrim($str2, "a");                    	//输出"helloa"
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    3.4 字符串的查找

    strstr()函数的语法格式如下:

    string strstr ( string $haystack, mixed $needle [, bool $before_needle = false ] )
    
    • 1

    说明:strstr()函数用于查找字符串指针 n e e d l e 在 字 符 串 needle在字符串 needlehaystack中出现的位置,并返回 h a y s t a c k 字 符 串 中 从 haystack字符串中从 haystackneedle第一次出现的位置开始到$haystack结尾的字符串。

    如果没有返回值,即没有发现 n e e d l e , 则 返 回 F A L S E 。 如 果 needle,则返回FALSE。如果 needleFALSEneedle不是一个字符串,那么它将被转化为整型并且作为字符的序号来使用。

    可选的before_needle参数若为TRUE,strstr()函数则返回 n e e d l e 在 needle在 needlehaystack中的位置之前的部分。strstr()函数还有一个同名函数strchr()。例如:

    
        echo strstr("hello world","llo");          //输出"llo world"
        echo strstr("hello world","llo",true);     //输出"he"
    
        $str="I love PHP";
        $needle="PHP";
        if(strstr($str,$needle))
            echo "有PHP";                    	 //输出"有PHP"
        else
            echo "没有PHP";               	    //不输出
    ?>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    3.5 字符串与ASCII码

    在字符串处理中,使用ord()函数可以返回字符的ASCII码,也可以使用chr()函数返回ASCII码对应的字符,例如:

    
        echo ord("a");                        	//输出97
        echo chr(98);                        	//输出"b"
    ?>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    4 字符串的比较

    使用“!=”和“”比较的两个对象不一定要类型相等,整型也可以和字符串比较,如 123"123" 返回TRUE。而“!”和“=”比较的对象类型要严格相同才可能返回TRUE,如 123===“123” 返回FALSE。

    经常使用的字符串比较函数有:strcmp()、strcasecmp()、strncmp()和strncasecmp()。语法格式如下:

    int strcmp(string $str1, string $str2)
    int strcasecmp(string $str1, string $str2)
    int strncmp(string $str1, string $str2, int $len)
    int strncasecmp(string $str1, string $str2, int $len)
    
    • 1
    • 2
    • 3
    • 4
    • 不同的是,strcmp()函数用于区分大小写的字符串比较;
    • strcasecmp()函数用于不区分大小写的比较;
    • strncmp()函数用于比较字符串的一部分,从字符串的开头开始比较,$len是要比较的长度;
    • strncasecmp()函数的作用和strncmp()函数的作用一样,只是strncasecmp()函数不区分大小写。例如:
    
        echo strcmp("aBcd","abde");                	// 输出-1,比较了"B"和"b","B"<"b"
        echo strcasecmp("abcd","aBde");            	// 输出-1,比较了"c"和"d","c"<"d"
        echo strncmp("abcd","aBcd",3);            	// 输出1,比较了"abc"和"aBc"
        echo strncasecmp("abcdd","aBcde",3);        // 输出0,比较了"abc"和"aBc"
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    5 字符串替换

    5.1 字符串的替换操作中最常用的就是str_replace()函数,其语法格式如下:

    mixed str_replace ( mixed $search, mixed $replace, mixed $subject [, int &$count ] )
    
    • 1

    说明str_replace()函数使用新字符串 r e p l a c e 替 换 字 符 串 replace替换字符串 replacesubject中的 s e a r c h 字 符 串 。 search字符串。 searchcount是可选参数,表示要执行的替换操作的次数。例如:

    
        $str="I love you";
        $replace="lucy";
        $end=str_replace("you",$replace,$str);
        echo $end;      //输出"I love lucy"
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    str_replace()函数对大小写敏感,还可以实现多对一、多对多的替换,但无法实现一对多的替换,例如:

    
        $str="What Is Your Name";
        $array=array("a","o","A","O","e");
        echo str_replace($array, "",$str);            	//多对一的替换,输出"Wht Is Yur Nm"
    
        $array1=array("a","b","c");
        $array2=array("d","e","f");
        echo str_replace($array1,$array2, "abcdef"); 	//多对多的替换,输出"defdef"
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    说明:使用多对多替换时,第二个数组中对应的元素会替换掉第一个数组中的元素,如果有一个数组比另一个数组元素数少,则不足的部分会作为空值来处理。

    5.2 PHP另外还有一个substr_replace()函数实现替换字符串的一部分,语法格式如下:

    mixed substr_replace(mixed $string, string $replacement, int $start [, int $length ])
    
    • 1

    l e n g t h 是 可 选 参 数 , 表 示 要 替 换 的 长 度 , 如 果 不 给 定 , 则 从 length是可选参数,表示要替换的长度,如果不给定,则从 lengthstart位置开始一直到字符串结束;

    • 如果$length为0,则替换字符串会插入到原字符串中;
    • 如果$length是正值,则表示要用替换字符串替换掉的字符串长度;
    • 如果 l e n g t h 是 负 值 , 则 表 示 从 字 符 串 末 尾 开 始 到 length是负值,则表示从字符串末尾开始到 lengthlength个字符为止停止替换。例如:
    
        echo substr_replace("abcdefg","OK",3);    	//输出"abcOK"
        echo substr_replace("abcdefg","OK",3,3);    	//输出"abcOKg"
        echo substr_replace("abcdefg","OK",-2,2);    	//输出"abcdeOK"
        echo substr_replace("abcdefg","OK",3,-2);   	//输出"abcOKfg"
        echo substr_replace("abcdefg","OK",2,0);    	//输出"abOKcdefg"
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    6 字符串与HTML

    6.1 将字符转化为HTML实体形式

    **htmlspecialchars()函数:**将字符转化为HTML实体形式

    语法格式如下:

    string htmlspecialchars(string $string [, int $quote_style [, string $charset [, bool $double_encode ]]])
    
    • 1

    参数 s t r i n g 是 要 转 换 的 字 符 串 , string是要转换的字符串, stringquote_style、 c h a r s e t 和 charset和 charsetdouble_encode都是可选参数。

    $quote_style指定如何转换单引号和双引号字符,取值可以是:

    • ENT_COMPAT(默认值,只转换双引号)
    • ENT_NOQUOTES(都不转换)
    • ENT_QUOTES(都转换)

    $charset是字符集,默认为UTF-8。

    $double_encode如果为FALSE则不转换成HTML实体,默认为TRUE。例如:

    
        $new="test";
        echo htmlspecialchars($new);                    	//页面中输出"test"
        echo htmlspecialchars($new, ENT_NOQUOTES);       	//页面中输出"test"
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    6.2 将HTML实体形式转化为特殊字符

    htmlspecialchars_decode()函数:可以将HTML实体形式转换为HTML格式

    
        $html=htmlspecialchars_decode("<a href='test'>test</a>");
        echo $html;
    ?>
    
    • 1
    • 2
    • 3
    • 4
    6.3 换行符的转换

    在HTML文件中使用“\n”,显示HTML代码时不能显示换行的效果,这时可以使用nl2br()函数,这个函数可以用HTML中的“
    ”标记代替字符串中的换行符“\n”。例如:

    
        $str="hello\nworld";
        echo $str;                 // 直接输出不会有换行符
        echo nl2br($str);          // "hello"后面换行
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    7 其它字符串函数

    7.1 字符串与数组
    (1)字符串转化为数组。

    使用explode()函数可以用指定的字符串分割另一个字符串,并返回一个数组。

    语法格式如下

    array explode(string $separator, string $string [, int $limit ])
    
    • 1

    说明:此函数返回由字符串组成的数组,每个元素都是 s t r i n g 的 一 个 子 串 , 它 们 被 字 符 串 string的一个子串,它们被字符串 stringseparator作为边界点分割出来。例如:

    
        $str="使用 空格 分割 字符串";
        $array=explode(" ", $str);
        print_r($array);
        //输出Array ( [0] => 使用 [1] => 空格 [2] => 分割 [3] => 字符串 )
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    (2)数组转化为字符串。

    使用implode()函数可以将数组中的字符串连接成一个字符串,语法格式如下:

    string implode(string $glue, array $pieces)
    
    • 1

    g l u e 是 用 于 连 接 字 符 串 的 连 接 符 , glue是用于连接字符串的连接符, gluepieces是保存要连接的字符串的数组。例如:

    
        $array=array("hello","how","are","you");
        $str=implode(",",$array);               // 使用逗号作为连接符
        echo $str;                            	// 输出"hello,how,are,you"
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    7.2 字符串加密函数

    PHP提供crypt()函数完成加密功能,语法格式如下:

    string crypt(string $str [, string $salt ])
    
    • 1

    这个函数完成的是单向加密的功能,即字符串一旦被加密就无法转化为原来的形式。

    PHP包含了它自己的MD5 Crypt实现,包括标准DES算法、扩展的DES算法及Blowfish算法。如果系统缺乏相应的实现,那么PHP将使用它自己的实现,以便在默认状态下获得更高的安全性。例如:

    
        $str="字符串";
        $password=crypt($str);
        echo $password;     // 输出单向加密后的字符串
    
        if(crypt("字符串",$password)==$password){
            echo "验证成功!";
        }
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    7.3 字符串转换函数

    字符串转换函数hex2bin()函数的功能是将十六进制字符串转换为二进制字符串,语法格式如下:

    string hex2bin ( string $data )
    
    • 1

    其中,参数$data是十六进制表示的数据,此函数返回给定数据的二进制表示或者在失败时返回FALSE。例如:

    
        $hex=hex2bin("6578616d706c65206865782064617461");
        var_dump($hex); // 打印 string 'example hex data' (length=16)
    ?> 
    
    • 1
    • 2
    • 3
    • 4
  • 相关阅读:
    php foreach变量引用的问题
    最小生成树(Prim普利姆算法、Kruskal克鲁斯卡尔算法)
    关于ESP32S3无法识别到端口问题
    Java的JDBC编程
    MySQL索引详解及演进过程以及延申出面试题(别再死记硬背了,跟着我推演一遍吧)
    【Unity3D日常BUG】Unity3D解决“找不到类型或命名空间名称“XXX”(您是否缺少using指令或程序集引用?)”等问题
    【开发工具】idea 的全局搜索快捷键(Ctrl+shift+F)失效
    开源语言大模型演进史:向LLaMA 2看齐
    【校招VIP】前端JS语言考点之选择器和优先级
    uniapp:如何实现点击图片可以全屏展示预览
  • 原文地址:https://blog.csdn.net/Mr_Morgans/article/details/127659030