第4章 字符串操作与正则表达式

在本章中,我们将讨论如何使用PHP的字符串函数来格式化和操作文本。我们还将介绍使用字符串函数或正则表达式来搜索(或替换)单词、短语或字符串中的其他模式。

在许多情况下,这些函数都是非常有用的。通常,你会希望整理或重新格式化将要存入到数据库中的用户输入信息。当需要创建搜索引擎(或其他东西)应用程序时,搜索函数简直棒极了。

在本章中,我们将主要介绍以下内容:

■字符串的格式化

■字符串的连接和分割

■字符串的比较

■使用字符串函数匹配和替换子字符串

■使用正则表达式

4.1 创建一个示例应用程序:智能表单邮件

在本章中,我们将介绍在一个智能表单邮件应用程序上下文中使用字符串和正则表达式函数。我们将把这些脚本添加到前面几章所介绍的Bob汽车配件站点上。

这一次,我们将为Bob的顾客建立一个直观而又实用的顾客意见反馈表单,在这个表单中,顾客可以输入他们的投诉和表扬,如图4-1所示。但是,与其他网站的类似表单相比,我们的应用程序将有很大的改善。我们不是将表单全部内容都发送到一个统一的电子邮件地址,例如feedback@example.com,而是尝试加入一些智能处理功能,例如在顾客的输入信息中查找一些关键词和短语,然后再将邮件发送到Bob公司适当的雇员那里。

第4章 字符串操作与正则表达式 - 图1

图 4-1 反馈表单要求顾客填写姓名、邮件地址和意见

例如,如果电子邮件中包含了单词“advertising(广告)”,那么这个邮件就可能将被反馈送到公司的市场部门。如果邮件是来自Bob的最大客户,那么就要把它直接发送到Bob那里。

我们将从程序清单4-1所示的简单脚本开始,然后再不断地添加新的代码。

程序清单4-1 processfeedback.php——邮件表单内容的基本脚本


<?php

//create short variable names

$name=$_POST['name'];

$email=$_POST['email'];

$feedback=$_POST['feedback'];

//set up some static information

$toaddress="feedback@example.com";

$subject="Feedback from web site";

$mailcontent="Customer name:".$name."\n".

"Customer email:".$email."\n".

"Customer comments:\n".$feedback."\n";

$fromaddress="From:webserver@example.com";

//invoke mail()function to send mail

mail($toaddress,$subject,$mailcontent,$fromaddress);

?>

<html>

<head>

<title>Bob's Auto Parts-Feedback Submitted</title>

</head>

<body>

<h1>Feedback submitted</h1>

<p>Your feedback has been sent.</p>

</body>

</html>


通常,应该使用一些函数(例如isset())来检查用户是否已经填写了所有要求的表单域。为了简化代码,我们在该脚本和其他例子中都将省略这个函数。

在这个脚本中,将看到我们将表单中各个域的内容连接在一起,然后使用PHP的mail()函数将它们发送到feedback@example.com。这是一个样例电子邮件地址。如果想对本章的代码进行测试,可以在这里替换为你自己的电子邮件地址。我们还没有使用过mail()函数,所以我们将介绍这个函数是如何工作的。

顾名思义,这个函数是用来发送电子邮件的。mail()函数的原型如下所示:


bool mail(string to,string subject,string message,

string[additional_headers[,string additional_parameters]]);


该函数的前三个参数是必需的,分别代表发送邮件的目的地址、主题行和消息内容。第四个参数可以用来发送任何额外的、有效的邮件头。有效的邮件头在RFC822文档中有说明,如果想了解其详细信息,可以通过在线方式查看(RFC,是征求意见文件的缩写。

它是许多互联网标准的来源——我们将在第19章中详细介绍它们)。在这里,我们通过第四个参数给邮件加了一个"From:"地址。也可以用它添加"Reply-To:"和"Cc:"域等。如果需要附加多个邮件头,只要用换行符(\n\r)在字符串中将它们分开,如下所示:


$additional_headers="From:webserver@example.com\r\n"

."Reply-To:bob@example.com";


可选的第五个参数可以向任何经过配置用来发送电子邮件的程序传递参数。

为了使用mail()函数,必须将PHP设置为指向邮件发送程序。如果以上脚本不能在当前的表单中正常工作,安装可能是问题所在。请参阅附录A的详细介绍。

在贯穿本章的内容中,将使用PHP的字符串处理函数和正则表达式函数来改进这个基本的脚本。