当前位置: 首页 > 文章教程  > 计算机与互联网 > 网络编程

3.5.1字符串常量

9/17/2020 9:38:49 PM 人评论

3.5.1字符串常量

3.5 字符串处理

在Web应用程序设计时经常要在网页中输出字符串,因此,字符串是PHP语言中最常用到的数据类型。本节专门对PHP语言中的字符串处理进行介绍。

3.5.1 字符串常量

字符串常量必须使用单引号(')或双引号(")括起来。例如:

'我是一个字符串'

"我是另一个字符串"

如果字符串中出现单引号(')或双引号("),则需要使用转义符号(\),例如:

echo 'I\'m a string'

输出的结果如下:

I'm a string

单引号字符串和双引号字符串的区别在于,如果在双引号字符串中出现变量时,程序会自动将其替换成变量的值,而单引号字符串中出现变量时则不会替换。

【例3-31】 演示字符串中包含变量的例子。

<?PHP

$a = 10;

echo('变量$a');

echo("<BR>");

echo("变量$a");

?>

运行结果如下:

变量$a

变量10

可以看到,在双引号字符串中,$a 被解析为变量$a 的值,即 10。如果希望在双引号字符串中输出$a,则可以使用转义字符(\)。

【例3-32】 在双引号字符串中输出$a,则可以使用转义字符(\)的例子。

<?PHP

$a = 10;

echo("变量\$a");

?>

输出结果如下:

变量$a

PHP支持的常用转义字符使用情况如表3-6所示。

表3-6 PHP的常用转义字符

figure_0053_0067

3.5.2 字符串中的字符

字符串实际上是由一组字符组成,可以通过下面的方式获取字符串中的字符。

字符串变量[index]

index指定获取字符的位置。0 表示第1个字符,1表示第2个字符,依此类推。

【例3-33】 获取字符串中字符的例子。

<?PHP

$a = "hello ";

$a = $b . "world ";

echo($a);

echo("\$a的第2个字符是");

echo($a[1]);

?>

运行结果如下:

$a的第2个字符是 e

3.5.3 获取字符串的长度

在PHP语言中,可以使用strlen()函数获取字符串的长度,语法如下:

int strlen(字符串);

函数返回字符串的长度。

【例3-34】 获取字符串长度的例子。

<?php

echo strlen("Hello world!");

?>

运行结果为12。如果字符串中有中文,则使用strlen()函数并不能准确地获取字符串的长度。因为strlen()函数实际是返回存储字符串所用的字节数。使用Windows记事本编辑的php文件默认采用ANSI编码。在ANSI编码中,一个英文字符占一个字节,一个中文字符则占两个字节。

【例3-35】 获取中文字符串长度的例子。

<?php

echo strlen("你好PHP!");

?>

运行结果为8,而不是预期的6。因为“你好”占4个字节,加上后面4个英文字符占4个字节,所以echo strlen("你好PHP!")返回8。

可以使用mb_strlen()函数计算包含中文的字符串的长度。语法如下:

int mb_strlen(字符串, 字符编码);

将字符编码设置为"GBK"或"gb2312"即可获得正确的中文字符串长度。

【例3-36】 使用mb_strlen()函数获取中文字符串长度的例子。

<?php

echo mb_strlen("你好PHP!", "GBK");

?>

运行结果为6。

3.5.4 比较字符串

在程序设计中,经常需要对字符串进行比较,判断两个字符串是否相等。在PHP语言中,可以使用strcmp()、strcasecmp()、strspn()和strcspn()函数进行字符串比较。

1.strcmp()函数

strcmp()函数用于比较两个字符串,语法如下:

int strcmp( string $str1, string $str2)

参数$str1和$str2是进行比较的两个字符串。如果str1小于str2,返回负数;如果str1大于str2,返回正数;二者相等则返回 0。注意该比较区分大小写,也就是说"ABC"不等于"abc"。

【例3-37】 使用strcmp ()函数比较字符串的例子。

<?php

echo strcmp("ABC", "abc");

?>

运行结果为-1。因为A的ASCII码值为65,而a的ASCII码值为97,且strcmp()函数是区分大小写的,所以"ABC"小于"abc"。

2.strcasecmp()函数

strcasecmp ()函数用于不区分大小写地比较两个字符串,语法如下:

int strcasecmp( string $str1, string $str2)

参数$str1和$str2是进行比较的两个字符串。如果str1小于str2,返回负数;如果str1大于str2,返回正数;二者相等则返回0。注意该比较不区分大小写,也就是说"ABC"等于"abc"。

【例3-38】 使用 strcasecmp ()函数比较字符串的例子。

<?php

echo strcasecmp ("ABC", "abc");

?>

运行结果为0。说明比较结果是"ABC"等于"abc"。

3.strspn()函数

strspn()函数用于计算字符串中全部字符都存在于指定字符集合中的第一段子串的长度。语法如下:

int strspn( string $subject, string $mask [, int $start [, int $length ]] )

函数返回字符串subject中全部字符都存在于字符串mask中的第一组连续字符(子字符串)的长度。如果省略了start和length参数,则检查整个subject字符串;如果指定了这两个参数,则只检查字符串subject的从start位置开始,长度为length的子串。

【例3-39】 使用strspn ()函数比较字符串$str前面由数字组成的子串的长度。

<?php

$str = "5564897acd54678";

echo strspn($str, "123456789");

?>

运行结果为7。

4.strcspn()函数

strcspn()函数用于计算字符串中包含指定字符集合中不存在的第一段子串的长度。语法如下:

int strcspn( string $ str1, string $ str2 [, int $start [, int $length ]] )

函数返回字符串str1中全部字符都不存在于字符串str2中的第一组连续字符(子字符串)的长度。如果省略了start和length参数,则检查整个 str1字符串;如果指定了这两个参数,则只检查字符串str1的从start位置开始,长度为length的子串。

【例3-40】 使用strcspn ()函数的例子。

<?php

echo(strcspn('abcd', 'apple')); //因为字符第一个字符a就出现在'apple'中,所以输出0

echo(strcspn('abcd', 'banana')); //因为字符第一个字符a就出现在'banana'中,所以输出0

echo(strcspn('hello', 'l')); //因为字符前2个字符'he'没有出现在'l'中,

//第3个字符'l'出现在'l'中所以输出2

echo(strcspn('hello', 'world')); //因为字符前2个字符'he'没有出现在'world'中,

//第3个字符'l'出现在'world'中所以输出2

?>

3.5.5 将字符串转换到HTML格式

在程序设计中,有时需要将大段的字符串显示在网页中,此时并不能简单地使用echo()函数。因为字符串中有一些特殊字符在HTML语言中不能正常显示,如换行符\n在HTML语言中对应“<BR>”。

【例3-41】 直接输出字符串时无法输出回车符的例子。

<?php

echo("hello\n world");

?>

运行结果如图3-15所示。这并不是希望的结果。

1.将换行符\n转换为“<BR>”

可以调用nl2br()函数将换行符\n转换为“<BR>”,其基本语法如下:

string nl2br( string $string)

【例3-42】 直接输出字符串时输出回车符的例子。

<?php

echo(nl2br("hello\n world"));

?>

运行结果如图3-16所示。可以看到,回车符起作用了。

figure_0056_0068

图3-15 例3-41的运行结果

figure_0056_0069

图3-16 例3-42的运行结果

2.htmlentities()函数

htmlentities()函数可以把字符串转换为 HTML 实体,其基本语法如下:

htmlentities(string,quotestyle,character-set)

参数说明如下。

• string:要转换的字符串。

• quotestyle:指定如何编码单引号和双引号。ENT_COMPAT为默认,表示仅编码双引号;ENT_QUOTES表示编码双引号和单引号;ENT_NOQUOTES表示不编码任何引号。

• character-set:指定要使用的字符集,ISO-8859-1 为默认,表示西欧;GB2312 表示简体中文,国家标准字符集;BIG5表示繁体中文;BIG5-HKSCS表示Big5 香港扩展。

【例3-43】 使用htmlentities ()函数把字符串转换为 HTML 实体的例子。

<html>

<body>

<?php

$str = "John & 'Adams'";

echo htmlentities($str, ENT_COMPAT);

echo "<br />";

echo htmlentities($str, ENT_QUOTES);

echo "<br />";

echo htmlentities($str, ENT_NOQUOTES);

?>

</body>

</html>

在浏览器中的输出如下:

John & 'Adams'

John & 'Adams'

John & 'Adams'

在浏览器中查看源代码可以看到下面的 HTML代码:

<html>

<body>

John &amp; 'Adams'<br />

John &amp; &#039;Adams&#039;<br />

John &amp; 'Adams'

</body>

</html>

3.5.6 替换字符串

PHP提供了一些替换字符串中子串的函数,其中常用的包括str_replace()函数和strtr()函数。

1.str_replace()函数

str_replace()函数的语法如下:

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

该函数返回一个字符串或者数组。该字符串或数组是将 subject 中全部的 search 都被 replace替换之后的结果。可选参数count指定替换发生的次数。

【例3-44】 使用str_replace()函数替换字符串的例子。

<?php

$bodytag = str_replace("ASP", "PHP", "你好ASP");

echo($bodytag);

?>

运行结果为“你好PHP”。程序将字符串"你好ASP"中的"ASP"替换为"PHP"。

2.strtr()函数

strtr ()函数的语法如下:

string strtr ( string $str , string $from , string $to )

该函数返回字符串 str 的一个副本,并将在 from 中指定的字符转换为 to 中相应的字符。

【例3-45】 使用 strtr()函数替换字符串的例子。

<?php

$str = strtr("你好ASP","ASP", "PHP");

echo($str);

?>

程序的效果与例3-44相同。

3.5.7 URL处理函数

在Web应用程序中,经常需要对URL字符串进行处理,本小节将介绍几个URL处理函数。

1.解析URL字符串

可以调用parse_url()函数解析URL字符串。parse_url()函数的语法如下:

array parse_url ( string $url )

参数$url是要解析的URL字符串。下面是一个URL字符串的例子:

'http://username:password@hostname/path?arg=value#anchor'

通常URL字符串包括如下部分。

• scheme:URL字符串中的协议部分。

• host:URL字符串中的域名部分。

• user:URL字符串中的用户名部分。

• pass:URL字符串中的密码部分。

• path:URL字符串中的脚本文件路径部分。

• query:URL字符串中的参数部分。

• fragment:URL字符串中#后面的命名锚记(书签)部分。

parse_url()函数返回解析URL字符串得到的结果数组,数组的键就是上面列出的各项。

【例3-46】 使用parse_url ()函数解析URL字符串的例子。

<?php

$url = 'http://username:password@hostname/path?arg=value#anchor';

print_r(parse_url($url));

?>

运行结果如图3-17所示。

figure_0058_0070

图3-17 例3-46的运行结果

2.URL编码

在URL字符串中,可以使用key=value键值对这样的形式来传递参数。如果有多个参数,则可以在键值对之间以&符号分隔,例如:

verify.php?user=admin&pass=password

上面的URL中包含2个参数,即user和pass。如果参数值字符串中包含了=或者&字符,那么就会造成接收URL的服务器解析错误,因此,必须将引起歧义的&和=符号进行转义,也就是对URL进行编码。

对URL进行编码的另一个原因是URL的编码格式是ASCII码,而不是Unicode,这也就是说不能在URL中包含任何非ASCII字符,如中文。这显然不能满足实际应用的需求。

URL编码的原则就是使用安全的字符(没有特殊用途或者特殊意义的可打印字符)去表示那些不安全的字符(如前面提到的=字符和&字符,以及中文字符)。

可以调用urlencode()函数对URL进行编码,语法如下:

string urlencode( string $str )

函数返回编码后的字符串,此字符串中除了“-”、“_”、“.”等字符之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。

【例3-47】 使用urlencode()函数对URL进行编码的例子。

<?php

$url = 'http://localhost/verify.php?user=' . urlencode('管理员') . '&pass=' .urlencode('pass=&word');

echo($url);

?>

运行结果如下:

http://localhost/verify.php?user=%B9%DC%C0%ED%D4%B1&pass=pass%3D%26word

3.URL解码

有编码就应该有解码,这才能得到被编码的内容。可以使用urldecode () 函数对使用urlencode()函数进行编码的URL进行解码,语法如下:

string urldecode(string str)

【例3-48】 使用urldecode()函数对URL进行解码的例子。

<?php

$str = urlencode('管理员');

echo urldecode($str);

?>

运行结果为“管理员”。也就是说,使用urldecode ()函数可以成功解码被urlencode()函数编码的字符串。

相关教程

共有条评论 网友评论

验证码: 看不清楚?