韶华将逝,雄心未已;欲与众君,共习此技.
《PHP和MySQL Web开发》学习笔记(五)
上一篇 / 下一篇 2007-07-10 19:50:24 / 天气: 晴朗 / 心情: 平静 / 个人分类:PHP & MySQL
第4章 字符串操作与正则表达式
4.1 创建一个示例实用程序:智能表单邮件
mail()函数的前三个参数是必需的,分别代表发送邮件的目的地址、主题行和消息内容。第四个参数可以用来发送任何额外的、有效的邮件头。有效的邮件头在RFC822文档中有说明。在这里,我们通过第四个参数给邮件加了一个“From:”地址,也可以用它来添加“Reply-To:”和“Cc:”域等。如果需要附加多个邮件头,只要用换行符(\n\r)在字符串中将它们分开。可选的第五个参数可以向任何经过配置用来发送电子邮件的程序传递参数。
为了使用mail()函数,必须将PHP设置为指向邮件发送程序。
mail()函数的前三个参数是必需的,分别代表发送邮件的目的地址、主题行和消息内容。第四个参数可以用来发送任何额外的、有效的邮件头。有效的邮件头在RFC822文档中有说明。在这里,我们通过第四个参数给邮件加了一个“From:”地址,也可以用它来添加“Reply-To:”和“Cc:”域等。如果需要附加多个邮件头,只要用换行符(\n\r)在字符串中将它们分开。可选的第五个参数可以向任何经过配置用来发送电子邮件的程序传递参数。
为了使用mail()函数,必须将PHP设置为指向邮件发送程序。
4.2 字符串的格式化
4.2.1 字符串的整理:chop()、ltrim()和trim()
trim()函数可以除去字符串开始位置和结束位置的空格,并将结果字符串返回。默认情况下,除去的字符是换行符和回车符(\n和\r)、水平和垂直制表符(\t和\x0B)、字符串结束符(\0)和空格。
ltrim()只从字符串的开始处(左边)除去空格,rtrim()只从字符串的结束处(右处)除去空格。
trim()函数可以除去字符串开始位置和结束位置的空格,并将结果字符串返回。默认情况下,除去的字符是换行符和回车符(\n和\r)、水平和垂直制表符(\t和\x0B)、字符串结束符(\0)和空格。
ltrim()只从字符串的开始处(左边)除去空格,rtrim()只从字符串的结束处(右处)除去空格。
4.2.2 格式化字符串以便显示
1. 使用HTML格式化:nl2br()函数
1. 使用HTML格式化:nl2br()函数
nl2br()函数将字符串作为输入参数,用XHTML中的<br />标记代替字符串中的换行符(在版本4.0.5之前用HTML的<br>标记)。这对于将一个长字符串显示在浏览器中是非常有用的。
请记住,HTML将忽略纯空格,所以如果不使用nl2br()函数来过滤这个输出结果,那么它看上去就是单独的一行(除非浏览器窗口进行了强制的换行)。
请记住,HTML将忽略纯空格,所以如果不使用nl2br()函数来过滤这个输出结果,那么它看上去就是单独的一行(除非浏览器窗口进行了强制的换行)。
2. 为打印输出而格式化字符串
PHP也支持print()结构,它实现的功能与echo相同,但具有返回值(true或false,表示成功或失败)。
print()函数是将一个格式化的字符串输出到浏览器中,而sprintf()函数是返回一个格式化了的字符串。传递给这两个函数的第一个参数都是字符串格式,它们使用模式代码而不是变量来描述输出字符串的基本形状。其他的参数是用来替换格式字符串的变量。
例如,在使用echo时,我们把要用的变量直接打印至该行中,如:echo "Total amount of order is $total.";
要使用print()函数得到相同的结果,应用使用如下语句:printf ("Total amount of order is %s.", $total);
格式化字符串中的%s是转换说明。
printf()函数的优点在于,可以使用更有用的转换说明来指定$total为一个浮点数,它的小数点后面应该有两位小数,如:printf ("Total amount of order is %.2f.", $total);
可以在格式化字符串中使用多个转换说明。如果有n个转换说明,在格式化字符串后面就应该带有n个参数。每个转换说明都将按给出的顺序被一个重新格式化过的参数代替。
所有的转换说明都以%开始。如果想打印一个“%”符号,必须使用“%%”。
对于4.0.6版本来说,可以使用带序号的参数方式,这就意味着参数的顺序并不一定要与转换说明中的顺序相同。
这些函数还有两种可替换的版本,分别是vprintf()和vsprintf()。这些变体函数接收两个参数:格式字符串和参数数组,而不是可变数量的参数。
PHP也支持print()结构,它实现的功能与echo相同,但具有返回值(true或false,表示成功或失败)。
print()函数是将一个格式化的字符串输出到浏览器中,而sprintf()函数是返回一个格式化了的字符串。传递给这两个函数的第一个参数都是字符串格式,它们使用模式代码而不是变量来描述输出字符串的基本形状。其他的参数是用来替换格式字符串的变量。
例如,在使用echo时,我们把要用的变量直接打印至该行中,如:echo "Total amount of order is $total.";
要使用print()函数得到相同的结果,应用使用如下语句:printf ("Total amount of order is %s.", $total);
格式化字符串中的%s是转换说明。
printf()函数的优点在于,可以使用更有用的转换说明来指定$total为一个浮点数,它的小数点后面应该有两位小数,如:printf ("Total amount of order is %.2f.", $total);
可以在格式化字符串中使用多个转换说明。如果有n个转换说明,在格式化字符串后面就应该带有n个参数。每个转换说明都将按给出的顺序被一个重新格式化过的参数代替。
所有的转换说明都以%开始。如果想打印一个“%”符号,必须使用“%%”。
对于4.0.6版本来说,可以使用带序号的参数方式,这就意味着参数的顺序并不一定要与转换说明中的顺序相同。
这些函数还有两种可替换的版本,分别是vprintf()和vsprintf()。这些变体函数接收两个参数:格式字符串和参数数组,而不是可变数量的参数。
3. 改变字符串中的字母大小写
Strtoupper(),将字符串转换为大写;Strtolower(),将字符串转换成小写;Ucfirst(),如果字符串的第一个字符是字母,就将该字符转换为大写;Ucwords(),将字符串每个单词的第一个字母转换为大写。
Strtoupper(),将字符串转换为大写;Strtolower(),将字符串转换成小写;Ucfirst(),如果字符串的第一个字符是字母,就将该字符转换为大写;Ucwords(),将字符串每个单词的第一个字母转换为大写。
4.2.3 格式化字符串以便存储:addslashes()和stripslashes()
对于字符串来说,某些字符肯定是有效的,但是当将数据插入到数据库中的时候可能会引起一些问题,因为数据库会将这些字符解释成控制符。这些有问题的字符就是引号(单引和双引)、反斜杠(\)和NULL字符。
我们需要找到一种标记或是转义它们的办法,以便使像MySQL这样的数据库能够理解我们表示的是有实际意义的特殊文本字符,而不是控制序列。为了将这些字符进行转义处理,可以在它们前面加一个反斜杠。例如,"(双引号)就变成\"(反斜杠双引号),\(反斜杠)就变成\\(反斜杠反斜杠)。(这个规则对所有的特殊字符都通用,所以,如果在字符串中存在\\字符,就需要用\\\\进行替换。)
PHP提供了两个专门用于转义字符串的函数。在将任何字符串写到数据库之前,应该使用addslashes()将它们重新格式化。例如:$feedback = addslashes($feedback);
和许多其他的字符串函数一样,addslashes()函数需要一个字符串作为输入参数,经过该函数处理,将返回一个重新格式化后的字符串。
在PHP新版本的默认情况下,magic_quotes_gpc配置指令是启用的。gpc表示GET、POST和cookie。这就意味着,来自这些方法或方式的变量将被自动包括在引号内。使用get_magic_quotes_gpc()函数,可以检查系统上的这个指令是否已经启用,如果来自这些方法的变量被自动引用在引号中,该函数将返回true。如果系统上该指令为启用的,在显示用户数据之前,必须调用sptripslashes()函数;否则,这些反斜杠会被显示出来。
使用魔术引号将允许你编写具有更好可移植性的代码。
对于字符串来说,某些字符肯定是有效的,但是当将数据插入到数据库中的时候可能会引起一些问题,因为数据库会将这些字符解释成控制符。这些有问题的字符就是引号(单引和双引)、反斜杠(\)和NULL字符。
我们需要找到一种标记或是转义它们的办法,以便使像MySQL这样的数据库能够理解我们表示的是有实际意义的特殊文本字符,而不是控制序列。为了将这些字符进行转义处理,可以在它们前面加一个反斜杠。例如,"(双引号)就变成\"(反斜杠双引号),\(反斜杠)就变成\\(反斜杠反斜杠)。(这个规则对所有的特殊字符都通用,所以,如果在字符串中存在\\字符,就需要用\\\\进行替换。)
PHP提供了两个专门用于转义字符串的函数。在将任何字符串写到数据库之前,应该使用addslashes()将它们重新格式化。例如:$feedback = addslashes($feedback);
和许多其他的字符串函数一样,addslashes()函数需要一个字符串作为输入参数,经过该函数处理,将返回一个重新格式化后的字符串。
在PHP新版本的默认情况下,magic_quotes_gpc配置指令是启用的。gpc表示GET、POST和cookie。这就意味着,来自这些方法或方式的变量将被自动包括在引号内。使用get_magic_quotes_gpc()函数,可以检查系统上的这个指令是否已经启用,如果来自这些方法的变量被自动引用在引号中,该函数将返回true。如果系统上该指令为启用的,在显示用户数据之前,必须调用sptripslashes()函数;否则,这些反斜杠会被显示出来。
使用魔术引号将允许你编写具有更好可移植性的代码。
4.3 用字符串函数连接和分割字符串
4.3.1 使用函数explode()、implode()和join()
explode()函数带有一个输入字符串作为参数,并根据一个指定的分隔符字符串将字符串本身分割为小块,将分割后的小块返回到一个数组中。可以通过可选的参数limit来限制分成字符串小块的数量。该参数是在PHP 4.0.1中新添加的。
要在我们的脚本中通过顾客的电子邮件地址获得域名,可以使用如下所示的代码:$email_array = explode('@', $email);
在这里,调用函数explode()将顾客的电子邮件地址分割成两部分:用户名称,它保存于$email_array[0]中,而域名则保存在$email_array[1]中。现在,我们已经可以测试域名来判断顾客的来源,然后将他们的反馈送到合适的人那里:
if ($email_array[1]=='bigcustomer.com')
$toaddress ='bob@example.com';
else
$toaddress ='feedback@example.com';
然而请注意,如果域名是大写的,这个函数就无法正常使用。可以通过将域名转换成全是大写或小写的方法来避免这个问题:$email_array[1] = strtolower ($email_array[1]);
使用implode()或join()函数来实现与函数explode()相反的效果,这两个函数的效果是一致的。例如:$new_email = implode('@', $email_array);
以上代码是从$email_array中取出数组元素,然后用第一个传入的参数字符将它们连接在一起。
explode()函数带有一个输入字符串作为参数,并根据一个指定的分隔符字符串将字符串本身分割为小块,将分割后的小块返回到一个数组中。可以通过可选的参数limit来限制分成字符串小块的数量。该参数是在PHP 4.0.1中新添加的。
要在我们的脚本中通过顾客的电子邮件地址获得域名,可以使用如下所示的代码:$email_array = explode('@', $email);
在这里,调用函数explode()将顾客的电子邮件地址分割成两部分:用户名称,它保存于$email_array[0]中,而域名则保存在$email_array[1]中。现在,我们已经可以测试域名来判断顾客的来源,然后将他们的反馈送到合适的人那里:
if ($email_array[1]=='bigcustomer.com')
$toaddress ='bob@example.com';
else
$toaddress ='feedback@example.com';
然而请注意,如果域名是大写的,这个函数就无法正常使用。可以通过将域名转换成全是大写或小写的方法来避免这个问题:$email_array[1] = strtolower ($email_array[1]);
使用implode()或join()函数来实现与函数explode()相反的效果,这两个函数的效果是一致的。例如:$new_email = implode('@', $email_array);
以上代码是从$email_array中取出数组元素,然后用第一个传入的参数字符将它们连接在一起。
4.3.2 使用strtok()函数
strtok()函数一次只从字符串中取出一些片段(称为令牌)。对于一次从字符串中取出一个单词的处理来说,strtok()函数比explode()函数的效果更好。
分隔符可以是一个字符,也可以是一个字符串,但是需要注意的是,输入的字符串会根据分隔符字符串中的每个字符来进行分割,而不是根据整个分隔字符串来分隔(就像explode()函数一样)。
为了从字符串中得到第一个令牌,可以调用strtok()函数,并带有两个输入参数:一个是要进行令牌化处理的字符串,还有一个就是分隔符。为了从字符串中得到令牌序列,可以只用一个参数——分隔符。该函数会保持它自己的内部指针在字符串中的位置。如果想重置指针,可以重新将该字符串传给这个函数。
strtok()函数的典型应用如下所示:
$token = strtok($feedback, ' ');
echo $token.'<br />';
while ($token!='')
{
$token = strtok(' ');
echo $token."<br /.";
}
以上代码将顾客反馈中的每个令牌打印在每一行上,并一直循环到不再有令牌。请注意,PHP 4.1.0版本以前的strtok()函数和C语言中的工作方式是不一样的。如果在目标字符串中同一个分隔符出现两次(在这个例子中就是一行有两个分隔符),strtok()将返回一个空字符串。当到达目标字符串的结束时,无法把它和空串的返回区分开来。在PHP的最新版本中,已经对这一点进行了改进,将忽略空字符串。
通常,使用像empty()这样的函数来检查顾客是否在表单中真正输入了反馈信息,是一个非常不错的主意。
strtok()函数一次只从字符串中取出一些片段(称为令牌)。对于一次从字符串中取出一个单词的处理来说,strtok()函数比explode()函数的效果更好。
分隔符可以是一个字符,也可以是一个字符串,但是需要注意的是,输入的字符串会根据分隔符字符串中的每个字符来进行分割,而不是根据整个分隔字符串来分隔(就像explode()函数一样)。
为了从字符串中得到第一个令牌,可以调用strtok()函数,并带有两个输入参数:一个是要进行令牌化处理的字符串,还有一个就是分隔符。为了从字符串中得到令牌序列,可以只用一个参数——分隔符。该函数会保持它自己的内部指针在字符串中的位置。如果想重置指针,可以重新将该字符串传给这个函数。
strtok()函数的典型应用如下所示:
$token = strtok($feedback, ' ');
echo $token.'<br />';
while ($token!='')
{
$token = strtok(' ');
echo $token."<br /.";
}
以上代码将顾客反馈中的每个令牌打印在每一行上,并一直循环到不再有令牌。请注意,PHP 4.1.0版本以前的strtok()函数和C语言中的工作方式是不一样的。如果在目标字符串中同一个分隔符出现两次(在这个例子中就是一行有两个分隔符),strtok()将返回一个空字符串。当到达目标字符串的结束时,无法把它和空串的返回区分开来。在PHP的最新版本中,已经对这一点进行了改进,将忽略空字符串。
通常,使用像empty()这样的函数来检查顾客是否在表单中真正输入了反馈信息,是一个非常不错的主意。
4.3.3 使用substr()函数
函数substr()允许我们访问一个字符串给定起点和终点的子字符串,并返回字符串的子字符串拷贝。当需要得到某个固定格式字符串中的一部分时,它们非常有用。
测试字符串如下:$test = 'Your customer service is excellent';
如果只用一个正数作为子字符串起点来调用这个函数,将得到从起点到字符串结束的整个字符串。例如: substr($test, 1);
以上代码将返回“our customer service is excellent”。请注意,字符串的起点和数组一样是从零开始的。
如果只用一个负数作为子字符串起点来调用它,将得到一个原字符串尾部的一个子字符串,字符个数等于给定负数的绝对值,例如:substr($test, -9);
将返回“excellent”。
length参数可以用于指定返回字符的个数(如果它是正数),或是字符串序列的尾部(如果它是负数)。例如:substr($test, 0, 4);
将返回字符串的头4个字符,即“Your”。
下面的代码:substr($test, 5, -13);
将返回从第4个到倒数第13个字符,即“customer service”。
函数substr()允许我们访问一个字符串给定起点和终点的子字符串,并返回字符串的子字符串拷贝。当需要得到某个固定格式字符串中的一部分时,它们非常有用。
测试字符串如下:$test = 'Your customer service is excellent';
如果只用一个正数作为子字符串起点来调用这个函数,将得到从起点到字符串结束的整个字符串。例如: substr($test, 1);
以上代码将返回“our customer service is excellent”。请注意,字符串的起点和数组一样是从零开始的。
如果只用一个负数作为子字符串起点来调用它,将得到一个原字符串尾部的一个子字符串,字符个数等于给定负数的绝对值,例如:substr($test, -9);
将返回“excellent”。
length参数可以用于指定返回字符的个数(如果它是正数),或是字符串序列的尾部(如果它是负数)。例如:substr($test, 0, 4);
将返回字符串的头4个字符,即“Your”。
下面的代码:substr($test, 5, -13);
将返回从第4个到倒数第13个字符,即“customer service”。
4.4 字符串的比较
4.4.1 字符串的排序:strcmp()、strcasecmp()和strnatcmp()
strcmp()函数需要两个进行比较的参数字符串。如果这两个字符串相等,该函数就返回0,如果按字典顺序str1在str2后面(大于str2)就返回一个正数,如果str1小于str2就返回一个负数。这个函数是区分大小写的。
函数strcasecmp()除了不区分大小写之外,其他和strcmp()一样。
函数strnatcmp()及与之对应的不区分大小写的strnatcasecmp()函数是在PHP 4中新添加的。这两个函数按“自然排序”比较字符串,所谓自然排序是按人们习惯的顺序进行排序。例如,strcmp()会认为2大于12,因为按字典顺序2要大于12,而strnatcmp()则是相反。关于自然排序可以在http://www.naturalordersort.org/网站上进一步了解。
strcmp()函数需要两个进行比较的参数字符串。如果这两个字符串相等,该函数就返回0,如果按字典顺序str1在str2后面(大于str2)就返回一个正数,如果str1小于str2就返回一个负数。这个函数是区分大小写的。
函数strcasecmp()除了不区分大小写之外,其他和strcmp()一样。
函数strnatcmp()及与之对应的不区分大小写的strnatcasecmp()函数是在PHP 4中新添加的。这两个函数按“自然排序”比较字符串,所谓自然排序是按人们习惯的顺序进行排序。例如,strcmp()会认为2大于12,因为按字典顺序2要大于12,而strnatcmp()则是相反。关于自然排序可以在http://www.naturalordersort.org/网站上进一步了解。
4.4.2 使用strlen()函数测试字符串的长度
可以使用函数strlen()来检查字符串的长度。如果传给它一个字符串,这个函数将返回字符串的长度。例如,strlen('hello')将返回5。
这个函数可以用来验证输入的数据。考虑一下我们表单中的电子邮件地址,它存储在变量$email中。检验一个保存在$email变量中的电子邮件地址的基本方法就是检查它的长度。根据推荐,如果一个国家的代码没有二给域名,只有一个字母的服务器名称和一个字母的电子邮件地址,那么它的最小长度是6个字符——例如a@a.to。因此,如果一个地址没有达到这个长度就会报错,可以用strlen($email)<6来进行判断。我们将在下一节中介绍一种更好的验证信息是否有效的方法。
可以使用函数strlen()来检查字符串的长度。如果传给它一个字符串,这个函数将返回字符串的长度。例如,strlen('hello')将返回5。
这个函数可以用来验证输入的数据。考虑一下我们表单中的电子邮件地址,它存储在变量$email中。检验一个保存在$email变量中的电子邮件地址的基本方法就是检查它的长度。根据推荐,如果一个国家的代码没有二给域名,只有一个字母的服务器名称和一个字母的电子邮件地址,那么它的最小长度是6个字符——例如a@a.to。因此,如果一个地址没有达到这个长度就会报错,可以用strlen($email)<6来进行判断。我们将在下一节中介绍一种更好的验证信息是否有效的方法。
4.5 使用字符串函数匹配和替换子字符串
4.5.1 在字符串中查找字符串:strstr()、strchr()、strrchr()和stristr()
strstr()函数的原型如下:string strstr(string haystack, string needle);
函数substr()是最常见的,它可以用于在一个较长的字符串中查找匹配的字符串或字符。请注意,在PHP中,函数strchr()和strstr()完全一样,虽然其函数名的意思是在一个字符串中查找一个字符。在PHP中,这两个函数都可用于在字符串中查找一个字符串,包括查找只包含一个字符的字符串。
必须向函数传递一个haystack参数和一个要找的needle参数。如果找到了needle的一个精确匹配,函数会从needle前面返回haystack,否则返回值为false。如果存在不止一个needle,返回的字符串从出现第一个needle的位置开始。
函数strstr()有两个变体。第一个变体是stristr(),它几乎和strstr()一样,其区别在于不区分字符大小写。第二个变体是strrchr(),它也几乎和strstr()一样,但会从最后出现needle的位置的前面返回字符串haystack。
strstr()函数的原型如下:string strstr(string haystack, string needle);
函数substr()是最常见的,它可以用于在一个较长的字符串中查找匹配的字符串或字符。请注意,在PHP中,函数strchr()和strstr()完全一样,虽然其函数名的意思是在一个字符串中查找一个字符。在PHP中,这两个函数都可用于在字符串中查找一个字符串,包括查找只包含一个字符的字符串。
必须向函数传递一个haystack参数和一个要找的needle参数。如果找到了needle的一个精确匹配,函数会从needle前面返回haystack,否则返回值为false。如果存在不止一个needle,返回的字符串从出现第一个needle的位置开始。
函数strstr()有两个变体。第一个变体是stristr(),它几乎和strstr()一样,其区别在于不区分字符大小写。第二个变体是strrchr(),它也几乎和strstr()一样,但会从最后出现needle的位置的前面返回字符串haystack。
4.5.2 查找子字符串的位置:strpos()、strrpos()
函数strpos()和strrpos()的操作和strstr()类似,但它不是返回一个子字符串,而返回子字符串needle在字符串haystack中的位置。更有趣的是,现在的PHP手册建议使用strpos()函数替代strstr()函数来查看一个子字符串在一个字符串中出现的位置,因为前者的运行速度更快。
此函数返回的整数代码字符串haystack中第一次出现子字符串needle的位置。通常,第一个字符是位置0。
例如,如下代码将会在浏览器中显示数值4:
$test = 'Hello world';
echo strpos($test, 'o');
该函数的可选参数offset是用来指定haystack的开始搜索的位置。例如:echo strpos($test, 'o', 5);
以上代码会在浏览器中显示数值7,因为PHP是从位置5开始搜索字符“o”的,所以就看不到位置4的那个字符“o”。
函数strrpos()也几乎是一样的,但返回的是字符串haystack中最后一次出现子字符串needle的位置。
在任何情况下,如果needle不在字符串中,strpos()或strrpos()都将返回false。因此,这就可能带来新的问题,因为false在一个如PHP这样的弱类型语言中等于0,也就是说字符串的第一个字符。
可以使用运算符“===”来测试返回值,从而避免这个问题:
$result = strpos($test, 'H');
if ($result === false)
echo 'Not found';
else
echo "Found at position $result";
请注意,这只在PHP4及其以后版本中有效;在PHP的早期版本中,可以通过测试返回值是否为false来看它是否为一个字符串(也就是false)。
函数strpos()和strrpos()的操作和strstr()类似,但它不是返回一个子字符串,而返回子字符串needle在字符串haystack中的位置。更有趣的是,现在的PHP手册建议使用strpos()函数替代strstr()函数来查看一个子字符串在一个字符串中出现的位置,因为前者的运行速度更快。
此函数返回的整数代码字符串haystack中第一次出现子字符串needle的位置。通常,第一个字符是位置0。
例如,如下代码将会在浏览器中显示数值4:
$test = 'Hello world';
echo strpos($test, 'o');
该函数的可选参数offset是用来指定haystack的开始搜索的位置。例如:echo strpos($test, 'o', 5);
以上代码会在浏览器中显示数值7,因为PHP是从位置5开始搜索字符“o”的,所以就看不到位置4的那个字符“o”。
函数strrpos()也几乎是一样的,但返回的是字符串haystack中最后一次出现子字符串needle的位置。
在任何情况下,如果needle不在字符串中,strpos()或strrpos()都将返回false。因此,这就可能带来新的问题,因为false在一个如PHP这样的弱类型语言中等于0,也就是说字符串的第一个字符。
可以使用运算符“===”来测试返回值,从而避免这个问题:
$result = strpos($test, 'H');
if ($result === false)
echo 'Not found';
else
echo "Found at position $result";
请注意,这只在PHP4及其以后版本中有效;在PHP的早期版本中,可以通过测试返回值是否为false来看它是否为一个字符串(也就是false)。
4.5.3 替换子字符串:str_replace()、substr_replace()
进行替换操作最常用的字符串函数是str_replace()。它的函数原型如下所示:
mixed str_replace(mixed needle, mixed new_needle, mixed haystack[, int &count]);
这个函数用“new_needle”替换所有haystack中的“needle”,并且返回haystack替换后的结果。可选的第四个参数是count,它包含了要执行的替换操作次数。请注意,count是PHP 5中新添加的。
提示 在PHP4.0.5版本中,可以以数组的方式传递所有的参数,该函数可以很好地完成替换。可以传递一个要被替换单词的数组,一个替换单词的数组,以及应用这些规则的目标字符串数组。这个函数将返回替换后的字符串数组。
如下所示的代码就是在str_replace()函数中使用数组的例子:$feedback = str_replace($offcolor,'%!@*', $feedback);
函数substr_replace()则用来在给定位置中查换和替换字符串中特定的子符串。它的原型如下所示:string substr_replace(string string, string replacement, int start, int [length]);
这个函数使用字符串replacement替换字符串string中的一部分。具体是哪一部分则取决于起始位置值和可选参数length的值。
start的值代表要替换字符串位置的开始偏移量。如果它为0或是一个正值,就是一个从字符串开始处计算的偏移量;如果它是一个负值,就是从字符串末尾开始的一个偏移量。例如,如下代码会用“X”替换$test中的最后一个字符:$test = substr_replace($test, 'X', -1);
参数length是可选的,它代表PHP停止替换操作的位置。如果不给定它的值,它会从字符串start位置开始一直到字符串结束。
如果length为零,替换字符串实际上会插入到字符串中而覆盖原有的字符串。一个正的length表示要用新字符串替换掉的字符串长度。一个负的length表示从字符串尾部开始到第length个字符停止替换。
进行替换操作最常用的字符串函数是str_replace()。它的函数原型如下所示:
mixed str_replace(mixed needle, mixed new_needle, mixed haystack[, int &count]);
这个函数用“new_needle”替换所有haystack中的“needle”,并且返回haystack替换后的结果。可选的第四个参数是count,它包含了要执行的替换操作次数。请注意,count是PHP 5中新添加的。
提示 在PHP4.0.5版本中,可以以数组的方式传递所有的参数,该函数可以很好地完成替换。可以传递一个要被替换单词的数组,一个替换单词的数组,以及应用这些规则的目标字符串数组。这个函数将返回替换后的字符串数组。
如下所示的代码就是在str_replace()函数中使用数组的例子:$feedback = str_replace($offcolor,'%!@*', $feedback);
函数substr_replace()则用来在给定位置中查换和替换字符串中特定的子符串。它的原型如下所示:string substr_replace(string string, string replacement, int start, int [length]);
这个函数使用字符串replacement替换字符串string中的一部分。具体是哪一部分则取决于起始位置值和可选参数length的值。
start的值代表要替换字符串位置的开始偏移量。如果它为0或是一个正值,就是一个从字符串开始处计算的偏移量;如果它是一个负值,就是从字符串末尾开始的一个偏移量。例如,如下代码会用“X”替换$test中的最后一个字符:$test = substr_replace($test, 'X', -1);
参数length是可选的,它代表PHP停止替换操作的位置。如果不给定它的值,它会从字符串start位置开始一直到字符串结束。
如果length为零,替换字符串实际上会插入到字符串中而覆盖原有的字符串。一个正的length表示要用新字符串替换掉的字符串长度。一个负的length表示从字符串尾部开始到第length个字符停止替换。
相关阅读:
- 《PHP和MySQL Web开发》学习笔记(一) (jayson, 2007-6-22)
- 《PHP和MySQL Web开发》学习笔记(二) (jayson, 2007-6-23)
- 《PHP和MySQL Web开发》学习笔记(三) (jayson, 2007-6-26)
- 《PHP和MySQL Web开发》学习笔记(四) (jayson, 2007-6-28)
- here document - 集成字符串 (redrangon, 2007-7-04)
- HooDongWiKi中生成随机图片验证码代码和注释 (redrangon, 2007-7-08)
