



mbstring模块定义了一系列多字节文本操作函数,可以更方便地处理如汉字等多字节字符。使用mbstring扩展模块,需要在php.ini配置文件(Windows系统)中找到“extension=mbstring”,并确认删除了行首的分号,保存配置文件并重启PHP网站。如果不能正确使用mbstring函数,还可以查看配置文件中的extension_dir参数设置的路径是否正确,或者重启计算机后进行测试。
获取mbstring模块的配置信息时,可以使用mb_get_info()函数,它会返回包含模块信息的数组。可以使用代码“print_r(mb_get_info());”查看完整的配置信息。
下面介绍mbstring模块中的一些常用函数。
mb_convert_case($s,$mode)函数,对字符串$s中的字母进行大小写转换,参数$mode的值包括:
● MB_CASE_LOWER,字母小写。
● MB_CASE_UPPER,字母大写。
● MB_CASE_TITLE,标题风格,单词首字母大写。
下面的代码展示了mb_convert_case()函数的应用。
<?php
$s = "I am learning PHP.";
echo mb_convert_case($s,MB_CASE_LOWER),"<br>";
echo mb_convert_case($s,MB_CASE_UPPER),"<br>";
echo mb_convert_case($s,MB_CASE_TITLE);
?>
代码执行结果见图3-29。
图 3-29
mb_strlen()函数,前面已经介绍过,此函数可以正确地统计汉字和其他类型字符的数量,如mb_strlen("学习PHP")返回5。
mb_strtolower()函数,将字符串中的字母转换为小写形式,并返回新的字符串。
mb_strtoupper()函数,将字符串中的字母转换为大写形式,并返回新的字符串。
mb_strwidth()函数,返回字符串的宽度,汉字按2字节计算,如mb_strwidth("学习PHP")返回7。
mb_substr()函数,截取字符串的一部分,函数定义如下。
函数的功能是在$str字符串中截取部分内容;参数$start指定开始截取的索引位置(0开始);参数$length指定截取的字符数量,默认为null值,表示截取$start开始的所有内容;参数$encoding指定文本的编码类型。下面的代码演示了mb_substr()函数的应用。
<?php
$s = "快乐学习PHP";
echo mb_substr($s,1,2),"<br>";
echo mb_substr($s,2);
?>
代码执行结果见图3-30。
图 3-30
mb_strimwidth()函数,获取按指定宽度截断的字符串,函数定义如下。
mb_strimwidth(string $str, int $start, int $width[, string $trimmarker = ""[, string $encoding = mb_internal_encoding()]] ) : string
函数的功能是在$str中从$start索引位置截取$width个字节(取完整的字符,实际截取内容可能少于此字节数);如有截断的字符,会将$trimmarker添加到新字符串末尾。下面的代码演示了mb_strimwidth()函数的使用。
<?php
$s = "快乐学习PHP";
echo mb_strimwidth($s,2,3),"<br>";
echo mb_strimwidth($s,2,4),"<br>";
echo mb_strimwidth($s,2,3,"*");
?>
代码执行结果见图3-31。
图 3-31
mb_strpos()函数,在字符串中查找指定的内容,并返回第一次出现的索引位置,函数定义如下。
mb_strpos(string $haystack, string $needle[, int $offset = 0 [, string $encoding = mb_internal_encoding()]]) : int
函数的功能是在$haystack中查找$needle,并返回第一次出现的位置,没有找到时返回false;参数$offset设置开始查找的位置,默认从第一个字符开始(索引值为0)。下面的代码演示了mb_strpos()函数的应用。
<?php
$s = "快乐学习PHP";
$result = mb_strpos($s,"学习");
if($result===false) echo "没有找到";
else echo "索引位置:",$result;
?>
执行代码会显示“索引位置:2”,即查询内容出现在第三个字符;可以修改mb_strpos()函数的第二个和第三个参数来观察输出结果。此外,mb_strpos()函数查询字符串时会区分字母的大小写,如果忽略字母大小写,可以使用mb_stripos()函数。
mb_strstr()函数,在字符串中查找指定的内容,并返回所需要的部分,函数定义如下。
mb_strstr(string $haystack, string $needle[, bool $before_needle = false[, string $encoding = mb_internal_encoding()]]) : string
函数的功能是,在$haystack中查询$needle,如果没有找到返回false;如果找到$needle会按$before_needle参数的设置返回内容,默认为false,返回$haystack中从$needle开始的所有内容,如果设置为true,则返回$haystack中$needle之前的内容(不包含$needle)。下面的代码展示了mb_strstr()函数的应用。
<?php
$s = "快乐学习PHP";
$result = mb_strstr($s,"学习");
if($result===false) echo "没有找到";
else echo $result;
echo "<br>";
$result = mb_strstr($s,"学习",true);
if($result===false) echo "没有找到";
else echo $result;
?>
代码执行结果见图3-32。
图 3-32
mb_stristr()函数与mb_strstr()函数功能相同,只是不区分字母大小写。
mb_strrchr()函数,查找指定内容在字符串中最后出现的位置,并根据需要返回相应的内容,函数定义如下。
mb_strrchr(string $haystack, string $needle[, bool $part = false[, string $encoding = mb_internal_encoding()]]) : string
函数的功能是,在$haystack中查找$needle,如果没有找到,函数返回false。如果找到指定的内容则根据$part参数设置返回内容,默认为false,会返回$haystack中从$needle开始的所有内容,如果是true,则返回$haystack中$needle之前的内容(不包含$needle)。下面的代码展示了mb_strrchr()函数的使用。
<?php
$s = "快乐学习PHP真开心";
$result = mb_strrchr($s,"开心");
if($result===false) echo "没有找到";
else echo $result;
echo "<br>";
$result = mb_strrchr($s,"开心",true);
if($result===false) echo "没有找到";
else echo $result;
?>
代码执行结果见图3-33,其中,第一个输出显示的是最后两个字符,第二个输出显示的是不包含最后两个字符的内容。
图 3-33
mb_strrichr()函数与mb_strrchr()函数功能相同,只是不区分字母大小写。
mb_strrpos()函数,查找指定内容在字符串最后出现的位置,函数定义如下。
mb_strrpos(string $haystack, string $needle[, int $offset = 0[, string $encoding = mb_internal_encoding()]]) : int
函数的功能是,在$haystack中查找$needle,并返回最后一次出现位置的索引,如果没有找到会返回false。下面的代码演示了mb_strrpos()函数的应用。
<?php
$s = "快乐学习PHP真快乐";
$result = mb_strrpos($s,"快乐");
if($result===false) echo "没有找到";
else echo $result;
?>
执行代码会显示8。如果查询时忽略字母大小写,可以使用mb_strripos()函数。
mb_substr_count($s,$n)函数,统计$n在$s中出现的数量,如下面的代码。
<?php
$s = "快乐学习PHP真快乐";
echo mb_substr_count($s,"快乐"),"<br>";
echo mb_substr_count($s,"真快乐"),"<br>";
echo mb_substr_count($s,"非常快乐");
?>
执行代码会显示2、1、0。
mb_split()函数,将文本内容分割为数组,函数定义如下。
mb_split(string $pattern , string $string [, int $limit = -1 ]) : array
函数的功能是通过$pattern分割$string字符串,参数$limit指定返回数组的最大成员数量,默认为-1,此时将分割$string字符中的全部内容。下面的代码演示了mb_split()函数的应用。
<?php
$s = "aaa,bbb,ccc";
$arr = mb_split(",",$s);
print_r($arr);
?>
代码执行结果见图3-34。
图 3-34