PHP快速入门之字符串及字符串函数

4.1 案例介绍

处理项目中的各种字符串

4.2 分析案例

用字符串函数根据需求处理字符串。

4.3 核心知识

字符串的定义

---单引号定义(转义\'和\\)

---双引号定义(转义\n \r \t \$ \\ \")

---定界符方法<<<eof

字符串函数

4.4 知识讲解

4.4.1字符串的定义

string是一系列字符。在 PHP 中,字符和字节一样,也就是说,一共有 256 种不同字符的可能性。这也暗示 PHP 对 Unicode 没有本地支持。

注: 一个字符串变得非常巨大也没有问题,PHP 没有给字符串的大小强加实现范围,所以完全没有理由担心长字符串。

语法:

字符串可以用三种字面上的方法定义:

—— 单引号 ‘‘和``

—— 双引号 ““

—— 定界符<<<

单引号

指定一个简单字符串的最简单的方法是用单引号(’)括起来。

例如: $str1=‘phpchina’;   //字符串str1赋值

用于单引号字符串的转义序列\’解释为一个单引号,\\解释为一个反斜杠(\)。任何其他反斜线的出现仅仅被解释为一个反斜杠。

注: 和其他两种语法不同,单引号字符串中出现的变量和转义序列不会被变量的值替代。


双引号

如果用双引号(“)括起字符串,PHP 懂得更多特殊字符的转义序列:

转义字符:

 \ 双引号  \n 换行

 \r 回车  \t 制表符

 \\ 反斜杠  \$ 美元符

 \{ 左大括号  \}  右大括号

 \[ 左中括号  \] 右中括号

此外,如果试图转义任何其它字符,反斜线本身也会被显示出来!

双引号字符串最重要的一点是其中的变量名会被变量值替代。

<?php

$aa=‘aa’;

   print(‘aa is \’aa\’’."<br/>");

   print("aa is \"aa\""."<br/>");

   print("aa is ‘aa’"."<br/>");

   print(‘aa is "aa"‘."<br/>");

   print(“aa is $aa”.“<br>“);//变量被值替换

print(“aa is {$aa}”.“<br>“);//大括号分离变量

   print(‘aa is $aa’."<br>");

   print(‘aa is ‘.$aa);

?>

定界符

另一种给字符串定界的方法使用定界符语法:(“<<<“)。应该在<<<之后提供一个标识符,然后是字符串,然后是同样的标识符结束字符串。结束标识符必须从行的第一列开始。定界符文本表现的就和双引号字符串一样,在定界符文本中不需要转义引号。

<?php

$my_quote=<<<here

"Put your hand on a hot stove for a minute, and it seems like an hour. Sit with a pretty girl for an hour, and it seems like a minute.here;

echo $my_quote;

?>

4.4.2打印字符串(字符串的输出)函数

echo( )

语法: echo "string arg1, string [argn]...";

它是语言结构,不是真正的函数。它和print的区别在于,可以接受多个参数。

例如:

echo“first”,”second”,”third”;//合法

echo (“hello”,”world!”); //解析错误


print( )

语法: int print(string arg);

本函数输出字符串。若成功则返回1,失败则返回 0。例如传输中途客户的浏览器突然挂了,则会造成输出失败的情形。

例如:if(!print(“Hello,world”))

   {

die(“you’re not listening to me!”);

   }

4.4.3 ucfirst( )

ucfirst()将字符串第一个字符改大写。 

语法: string ucfirst(string str);

返回值: 字符串

本函数返回字符串 str 第一个字的字首字母改成大写。

<?php$foo = ’hello world!’;$foo = ucfirst($foo);               // Hello world!$bar = ’HELLO WORLD!’;$bar = ucfirst($bar);                // HELLO WORLD!$bar = ucfirst(strtolower($bar)); // Hello world!

?>

4.4.4 ucwords( )

ucwords()将字符串每个字第一个字母改大写。 

语法: string ucwords(string str);

返回值: 字符串

本函数返回字符串 str 每个字的字首字母全都改成大写。

<?php$foo = ’hello world!’;$foo = ucwords($foo);             // Hello World! $bar = ’HELLO WORLD!’;$bar = ucwords($bar);             // HELLO WORLD!$bar = ucwords(strtolower($bar)); // Hello World!

?>

4.4.5格式化字符串以便显示

函数:sprintf() --将字符串格式化。 

语法: string sprintf(string format, mixed [args]...);

返回值: 字符串

本函数用来将字符串格式化。参数 format 是转换的格式,以百分比符号 % 开始到转换字符为止。

转换说明的类型码如下:

b 整数转成二进位。 

c 整数转成对应的 ASCII 字符。 

d 整数转成十进位。 

f 单倍精确度数字转成浮点数。 

o 整数转成八进位。 

s 转成字符串。 

x 整数转成小写十六进位。 

X 整数转成大写十六进位。

printf( )

输出格式化字符串。

语法: int printf(string format, mixed [args]...);

返回值: 整数 

本函数依参数 format 指定的内容格式将字符串格式化,同sprintf()。

<?php

   printf("1...the character value of %d is %c",72,72)

   printf("2...control the number of decimal in %f with %.2f",5.1234,5.1234);

   printf("3...we can also left-pad number with zeros: %05f",33.22);

printf("4...or we can left-pad number and special precision : %5.2f",33.22);

printf("5...the hexadecimal representation of %d is %x",92,92);

printf("6...but you can also write it as %X",92);

printf("7...and if you were wondering, its octal representation is %o",92);

printf("8...left-pad the string %s with dashes, like so: %’*6s",’foo’,’bar’);

printf("9...and now let’s right-pad it with dashes: %’*-6s",’foo’,’bar’);

?>

4.4.6 explode()

使用一个字符串分割另一个字符串 

语法:array explode ( string separator, string string [, int limit] )

此函数返回由字符串组成的数组,每个元素都是 string 的一个子串,它们被字符串 separator 作为边界点分割出来。如果设置了 limit 参数,则返回的数组包含最多 limit 个元素,而最后那个元素将包含 string 的剩余部分。

例如:

$pizza  = "piece1 piece2 piece3";

$pieces = explode(“  ", $pizza);

echo $pieces[0]; // piece1

echo $pieces[1]; // piece2

4.4.7 implode()

用一组较小的字符串创建一个大字符串。

格式:string implode ( string glue, array pieces )

第一个参数glue是放在第二个参数pieces的元素之间的字符串。可以像下面这样重建简单的逗号分隔的字符串。

例如:

$array = array(‘lastname’, ‘email’, ‘phone’);$comma_separated = implode(“,”, $array);echo $comma_separated; //显示lastname,email,phone

4.4.8 str_split( )

将字符串转为数组。 

语法: array str_split ( string $string [, int $split_length = 1 ] );

返回值: 数组

本函数用来将一个字符串按规定个数划分为数组。第二个参数作为可选参数规定每几个字符进行一次划分。

<?php$str = ’abcdef’;print_r( str_split($str)); // array(‘a’,’b’,’c’,’d’,’e’,’f’);

print_r( str_split($str,2)); // array(‘ab’,’cd’,’ef’);

?>

4.4.9 strlen( )

取得字符串长度。

语法: int strlen(string str);

返回值: 整数 

本函数返回指定的字符串长度。

<?php$str = ’abcdef’;echo strlen($str); // 6$str = ’ ab cd ’;echo strlen($str); // 7

?>

4.4.10 substr( )

取部份字符串。 

语法: string substr(string string, int start, int [length]);

返回值: 字符串 

本函数将字符串 string 的第 start 位起的字符串取出 length 个字符,若省略参数 length,则取到字符串末尾 。若 start 为负数,则从字符串尾端往前开始提取。如果length为整数,表示返回length个字符,若为负数,则表示取到倒数第 length 个字符。

<?phpecho substr(‘abcdef’, 1);     // bcdefecho substr(‘abcdef’, 1, 3);  // bcdecho substr(‘abcdef’, 0, 4);  // abcdecho substr(‘abcdef’, 0, 8);  // abcdefecho substr(‘abcdef’, -1, 1); // f// Accessing single characters in a string// can also be achived using "curly braces"$string = ’abcdef’;echo $string{0};                 // aecho $string{3};                 // decho $string{strlen($string)-1}; // f

?>

4.4.11 strstr( )  别名:strchr( )

返回字符串中某字符串开始处至结束的字符串。

语法: string strstr(string haystack, string needle);

返回值: 字符串 

本函数将 needle 最先出现在 haystack 处起至 haystack 结束的字符串返回。若找不到 needle 则返回 false。

4.4.12 strrchr()

取得某字符最后出现的位置字符串。 

语法: string strrchr(string haystack, string needle);

本函数用来寻找字符串 haystack 中的字符 needle 最后出现位置,并将此位置起至字符串 haystack 结束之间的字符串返回。若没有找到 needle 则返回 false。 

<?php// get last directory in $PATH$dir = substr(strrchr($PATH, ":"), 1);// get everything after last newline$text = "Line 1\nLine 2\nLine 3";$last = substr(strrchr($text, 10), 1 );

?>

4.4.13 strpos()

寻找字符串中某字符最先出现的位置。默认从 0 开始。 

语法: int strpos(string haystack, string needle, int [offset]);

本函数用来寻找字符串 haystack 中的字符 needle 最先出现的位置。若找不到指定的字符,则返回 false 值。参数 offset 可省略,用来表示从 offset 开始找。

<?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 {    echo "The string ’$findme’ was found in the string ’$mystring’";    echo " and exists at position $pos";}// We can search for the character, ignoring anything before the offset$newstring = ’abcdef abcdef’;$pos = strpos($newstring, ’a’, 1); // $pos = 7, not 0

?>

4.4.14 strrpos( )

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

语法: int strrpos(string haystack, char needle);

返回值: 整数

本函数用来寻找字符串 haystack 中的字符 needle 最后出现的位置。若找不到指定的字符,则返回 false 值。

<?php// in PHP 4.0.0 and newer:$pos = strrpos($mystring, "b");if ($pos === false) { // note: three equal signs    // not found...}// in versions older than 4.0.0:$pos = strrpos($mystring, "b");if (is_bool($pos) && !$pos) {    // not found...}

?>

4.4.15 str_pad()

str_pad()可以用于一些敏感信息的保护,如金额的打印。

有4个参数。第一个参数指明要处理的字符串,第二个参数给定处理后字符串的长度。第三个字符串给出填补所用的字符串,默认使用空格进行填补。最后一个参数指定填补的方向,它有3个可选值:

STR_PAD_LEFT    字符串左添补

STR_PAD_RIGHT 字符串右添补

STR_PAD_BOTH  字符串两端添补

<?php$input = "Alien";echo str_pad($input, 10);                      // produces "Alien     "echo str_pad($input, 10, "-=", STR_PAD_LEFT);  // produces "-=-=-Alien"echo str_pad($input, 10, "_", STR_PAD_BOTH);   // produces "__Alien___"echo str_pad($input, 6 , "___");               // produces "Alien_"

?>

4.4.16字符串的替换

str_replace()

字符串替换,三种替换方式

str_replace(string $search, string $replace, string $str);

str_replace(array $search, string $replace, string $str);

str_replace(array $search, array $replace, string $str);

<?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);// Use of the count parameter is available as of PHP 5.0.0$str = str_replace("ll", "", "good golly miss molly!", $count);echo $count; // 2// Order of replacement $str     = "Line 1\nLine 2\rLine 3\r\nLine 4\n";$order   = array("\r\n", "\n", "\r");$replace = ’<br />‘;// Processes \r\n’s first so they aren’t converted twice. $newstr = str_replace($order, $replace, $str);// Outputs: apearpearle pear$letters = array(‘a’, ’p’);$fruit   = array(‘apple’, ’pear’);$text    = ’a p’;$output  = str_replace($letters, $fruit, $text);echo $output; 

?>

4.4.17处理URL

除了对HTML文字的处理, 在WEB开发时还要对URL地址进行处理。处理URL主要包括:

对URL字符串的解析

parse_url();(解析完整的URL转变成数组)

parse_str();(解析请求字符串转变成数组)

URL编码处理

urlencode(); (替换所有非字母数字的字符,变为%后面跟两位16进制,空格变为+号)

urldecode(); (对已%##编码的URL进行解析还原)

rawurlencode(); (替换所有非字母数字的字符,变为%后面跟两位16进制) 

rawurldecode(); (对已%编码的URL进行解析还原)

构造查询字符串等。

http_build_query();(生成 url-encoded 之后的请求字符串 )

<?php$url = ’http://username:password@hostname/path?arg=value#anchor’;print_r(parse_url($url));$str = "first=value&arr[]=foo+bar&arr[]=baz";parse_str($str);echo $first;  // valueecho $arr[0]; // foo barecho $arr[1]; // bazparse_str($str, $output);echo $output[‘first’];  // valueecho $output[‘arr’][0]; // foo barecho $output[‘arr’][1]; // baz$query_string = ’foo=‘ . urlencode($foo) . ’&bar=‘ . urlencode($bar);echo ’<a href="mycgi?’ . htmlentities($query_string) . ’">‘;

?>

4.5 知识运用

在Web应用中,很多情况下需要对字符串进行处理和分析,通常涉及字符串的格式化、连接与分割、比较、查找等一系列操作。用户和系统的交互也基本上是通过文字来进行的,因此系统对文本信息,即字符串的处理非常重视。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,723评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,485评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,998评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,323评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,355评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,079评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,389评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,019评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,519评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,971评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,100评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,738评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,293评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,289评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,517评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,547评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,834评论 2 345