我们将讨论如何使用PHP的字符串函数格式化和操作文本。我们还将介绍使用字符串函数或正则表达式来搜索(或替换)单词、短语或字符串中的其他模式。
本章,我们主要介绍:
字符串的格式化
字符串的连接和分割
字符串的比较
使用字符串函数匹配和替换子字符串
使用正则表达式
4.1 创建一个示例应用程序:智能表单邮件。
建立顾客意见反馈表单,但是并不将表达全部内容发送邮件。而是加入一些智能处理,例如,在输入信息中查找一些关键词和短语,然后才将其发送。
mail函数原型:
bool mail(string to, string subject, string message, [string additional_headers[, string additional_paramoters]]);
前三个是必须的,第四个参数可以用来发送任何额外的、有效的邮件头。如果想了解其详细信息,可以通过在线方式查看。
这里我们通过第四个参数给邮件添加了一个“From:”地址。也可以用它添加“Relay-To:”和“Cc:”域等。
第五个参数可以向任何经过配置用来发送电子邮件的程序传递参数。
为了使用mail()函数,必须将PHP设置为指向邮件发送程序。
4.2 字符串的格式化
通常,在使用用户输入的字符串之前,必须对它们进行整理。
4.2.1 字符串的整理:chop()、ltrim()和trim()
通常,应该使用一些函数(例如isset())来检查用户是否已经填写了所有要求的表单域。为了简化,本例省略。
整理字符串的第一步是清理字符串中多余的空格。
trim()函数可以去除字符串开始位置和结束位置的空格,并将结果字符串返回。
除去的字符是换行符和回车符(\n和\r)、水平和垂直制表符(\t和\x0B)、字符串结束符(\0)和空格。
除了这些默认的过滤字符列表外,也可以在该函数的第二个参数中提供要过滤的特殊字符。
trim()除去这个字符串前后的空格、ltrim()只从字符串的左边除去空格,rtrim()只从字符串的右边除去空格
4.2.2 格式化字符串以便显示
1.使用HTML格式化:nl2br()函数
将字符串作为输入参数,用XHTML中的
标记代替字符串中的换行符。
请记住,HTML将忽略纯空格,所以如果不使用nl2br函数来过滤这个输出结果,那么它看上去就是单独的一行。
2.为打印输出而格式化字符串
PHP支持print()结构,功能和echo相同,不过它返回true或者false。
printf()和sprintf(),还可以实现一些更复杂的格式。
printf将一个格式化的字符串输出到浏览器中,而sprintf是返回一个格式化了的字符串。
string sprintf(string format [, mixed args ...])
void printf(string format [, mixed args...])
使用echo时,可以这样:
echo "total amout of order is $total.";
使用printf时,需要:
printf("total amout of order is %s", $total);
格式化字符串中%s是转换说明。就是“用一个字符串代替”。
printf的优点在于,可以使用有用的转换说明来指定$total为一个浮点数,它的小数点后面应该有两位小数,如下:
printf("total amout of order is %.2f", $total);
这样12.4 就会被打印成12.40;
可以在格式化字符串中使用多个转换说明,n个转换说明,n个参数。
printf()函数优点在于可以格式化输出!
格式如下:%['padding_character][-][width][.precision]type
所有的转换说明都是以%开始,如果想打印一个%符号,必须用%%.
参数'padding_character是可选.它将被用来填充变量直至所指定的宽度.该参数的作用就在变量前面填充.默认的填充字符是一个空格,如果指定0或者空格,就不需要 ' 单引号作为前缀,其他字符就必须指定 ' 作为前缀.
参数 - 是可选.它指左对齐,默认是右对齐.
参数width是指被替换的变量的长度.
参数precision表示以小数点开始.它指明小数点后要显示的位数.
参数type 是类型码.
请看下表:
类型 | 含义
b | 解释为整数并作为二进制输出.
c | 解释为整数并作为字符表示输出(ASCII码).
d | 解释为整数并作为整数输出.
f | 解释为双精度并作为浮点数输出.
o | 解释为整数并作为八进制数输出.
s | 解释为字符串并为字符串输出.
u | 解释为整数并作为非指定小数输出.
x | 解释为整数并作为带有小写字母a-f的十六进制数输出
X | 解释为整数并作为带有大写字母A-F的十六进制数输出
eg:
printf("the num is %'a8.2f", 1.234);
输出结果:
the num is aaaa1.23
当在类型转换代码中使用printf()函数时,你可以使用带序号的参数方式,这就意味着参数的顺序并不一定要与转换说明中的顺序相同。
例如:
printf("total amount of orders is %2\$.2f (with shipping %1\$.2f)", 1.234, 2.567);
输出结果:
total amount of orders is 2.57 (with shipping 1.23)
只要直接在“%”符号后添加参数的位置,并且以$符号为结束,这个方法也可以在重复参数中使用。
3.改变字符串中的字母大小写
字符串大小写函数和它们的效果
$str = "student";
// 将字符串转换成大写
echo strtoupper($str)."
";
$str2= "GOOD";
// 将字符串转换成小写
echo strtolower($str2)."
";
$str3 = "a123";
// 如果字符串的第一个字符是字母,就将该字符转换为大写;
echo ucfirst($str3)."
";
$str4 = "good good study, day day up";
// 将字符串每个单词的第一个字母转换为大写;
echo ucwords($str4)."
";
输出结果是:
STUDENT
good
A123
Good Good Study, Day Day Up
4.2.3 格式化字符串以便存储:addslashes()和stripeslashes()
除了使用字符串函数来重新格式化一个可见的字符串之外,也可以使用其中的一些函数来重新格式化字符串,以便将其存入数据库。
对于字符串来说,某些字符肯定是有效的,但是将数据插入到数据库中的时候可能会引起一些问题,因为数据库会将这些字符解释成控制符。这些有问题的字符就是引号(单引号双引号)、反斜扛(\)和NULL字符。
为了让数据库能够知道这些字符是有实际意义的特殊文本字符,而不是控制序列。可以进行转义处理,在它们前面加一个反斜杠。