PHP处理字符串

222 阅读4分钟

                                                        PHP处理字符串

1、字符串计算(长度/定位字符出现的位置)
1)、strlen():取得字符串的长度
语法:string strlen( string string )
使用:
echo strlen('abc def g');        //输出 9
echo strlen('abc 哈哈');        //输出10 UTF-8编码下输出 10
2)、mb_strlen — 获取字符串的长度
语法:mixed mb_strlen ( string $str [, string $encoding = mb_internal_encoding() ] )
参数说明:
参数        说明
str            要检查长度的字符串。
encoding    encoding 参数为字符编码。如果省略,则使用内部字符编码。
返回值:
返回具有 encoding 编码的字符串 str 包含的字符数。 多字节的字符被计为 1。
如果给定的 encoding 无效则返回 FALSE。
使用:
echo mb_strlen('abc def g');    //输出 9
echo mb_strlen('abc 哈哈');        //输出6
3)、strpos() 函数用于定位字符串第一次出现的位置,返回整型。
语法:int strpos ( string string, mixed needle [, int start] )
参数说明:
参数     说明
string     要处理的字符串
needle     要定位的字符串
start     可选,定位的起始位置
使用:
$url = 'com?uid=999&name=zzz&age=18';
$params = strpos($url, '&');
echo $params;            // 输出 11
4)、strrpos() 函数用于定位字符串最后一次出现的位置,返回整型。
语法:int strrpos ( string $haystack , string $needle [, int $offset = 0 ] )
参数说明:
参数        说明
haystack    在此字符串中进行查找。
needle        如果 needle不是一个字符串,它将被转换为整型并被视为字符的顺序值。
offset        或许会查找字符串中任意长度的子字符串。负数值将导致查找在字符串结尾处开始的计数位置处结束。
返回值:
返回 needle 存在的位置。如果没有找到,返回 FALSE。 Also note that string positions start at 0, and not 1.
使用:
(1)、很容易将“在位置 0 处找到”和“未发现字符串”这两种情况搞错。这是检测区别的办法:
$pos = strrpos($mystring, "b");
if ($pos === false) { // 注意: 三个等号
// 未发现...
}
(2)、不使用offset查找
$foo = "0123456789a123456789b123456789c";
var_dump(strrpos($foo, '1'));  //结果: int(21)
var_dump(strrpos($foo, '7'));  // 结果: int(27)
(3)、使用偏移量进行查找
$foo = "0123456789a123456789b123456789c";
var_dump(strrpos($foo, '7', -5));  // 从尾部第 5 个位置开始查找    结果: int(17)
var_dump(strrpos($foo, '7', 20));  // 从第 20 个位置开始查找    结果: int(27)        
var_dump(strrpos($foo, '7', 28));  // 结果: bool(false)


2、字符串截取
1)、substr():从字符串中获取其中的一部分
语法:string substr ( string string, int start [, int length] )
参数说明:
参数     说明
string     要处理的字符串
start     字符串开始位置,起始位置为 0 ,为负则从字符串结尾的指定位置开始
length     可选,字符串返回的长度,默认是直到字符串的结尾,为负则从字符串末端返回
使用:
echo substr('abcdefg', 1);      //输出 bcdefg
echo substr('abcdefg', 1, 3);   //输出 bcd
echo substr('abcdefg', -3, 2);  //输出 ef
echo substr('abcdefg', 1, -2);  //输出 bcde
2)、strstr():查找字符串在另一个字符串中第一次出现的位置,并返回从该位置到字符串结尾的所有字符,如果没找到则返回 FALSE
语法:string strstr ( string string, string needle )
参数说明:
参数     说明
string     要处理的字符串
needle     要查找的字符串,如果是数字,则搜索匹配数字 ASCII 值的字符
使用:
$url = 'http://www.****.com?uid=999&name=zzz&age=18';
$params = strstr($url, '&');
echo $params;            // 输出 &name=zzz&age=18
提示:该函数对大小写敏感。如需进行大小写不敏感的查找,请使用 stristr() 。
别名:strchr()
3)、strrchr():查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符
语法:string strrchr ( string string, string needle )
参数说明:
参数     说明
string     要处理的字符串
needle     要查找的字符串,如果是数字,则搜索匹配数字 ASCII 值的字符
使用:
$url = 'http://www.****.com?uid=999&name=zzz&age=18';
$params = strrchr($url, '&');
echo $params;            // 输出 &age=18
4)、扩展:
(1)、截取某个最后出现的字符后面的所有内容
法一:
$url = 'http://www.****.com?uid=999&name=zzz&age=18&pwd=123456';
$params = substr(strrchr($url, "&"), 1);
echo $params;            // 输出 pwd=123456
法二:
$url = 'http://www.****.com?uid=999&name=zzz&age=18&pwd=123456';
$params = substr( $url, (strrpos($url, "&")+1) );
$params;            // 输出 pwd=123456
(2)、截取某个第一次出现的字符后面的所有内容
法一:
$url = 'http://www.****.com?uid=999&name=zzz&age=18&pwd=123456';
$params = substr(strstr($url, "&"), 1);
echo $params;            // name=zzz&age=18&pwd=123456
法二:
$url = 'http://www.****.com?uid=999&name=zzz&age=18&pwd=123456';
$params = substr( $url, (strpos($url, "&")+1) );
echo $params;            // name=zzz&age=18&pwd=123456

3、字符串去除
1)、trim — 去除字符串首尾处的空白字符(或者其他字符)
语法:string trim ( string $str [, string $character_mask = " \t\n\r\0\x0B" ] )
参数说明:
参数            说明
str                待处理的字符串
character_mask    可选参数,过滤字符也可由 character_mask 参数指定。一般要列出所有希望过滤的字符,也可以使用 “..” 列出一个字符范围。
返回值:过滤后的字符串
去除字符范围:
" " (ASCII 32 (0x20)),普通空格符。
"\t" (ASCII 9 (0x09)),制表符。
"\n" (ASCII 10 (0x0A)),换行符。
"\r" (ASCII 13 (0x0D)),回车符。
"\0" (ASCII 0 (0x00)),空字节符。
"\x0B" (ASCII 11 (0x0B)),垂直制表符。
2)、ltrim — 删除字符串开头(左边left)的空白字符(或其他字符)
3)、rtrim() - 删除字符串末端(右边right)的空白字符(或者其他字符)

4、字符串<=>数组转化
1)、数组  => 字符串
implode — 将一个一维数组的值转化为字符串
语法:
string implode ( string $glue , array $pieces )        //用 glue 将一维数组的值连接为一个字符串。
string implode ( array $pieces )
注意:因为历史原因,implode() 可以接收两种参数顺序,但是 explode() 不行。不过按文档中的顺序可以避免混淆。
使用:
$arr = array('a', 'b', 'c');
$str = implode(",", $arr);
echo $str; //a,b,c
2)、字符串 => 数组
(1)、explode — 使用一个字符串分割另一个字符串
语法:array explode ( string $delimiter , string $string [, int $limit ] )
参数说明:
参数        说明
delimiter    边界上的分隔字符。
string        输入的字符串
limit    
如果设置了 limit 参数并且是正数,则返回的数组包含最多 limit 个元素,而最后那个元素将包含 string 的剩余部分。
如果 limit 参数是负数,则返回除了最后的 -limit 个元素外的所有元素。
如果 limit 是 0,则会被当做 1。
返回值:
此函数返回由字符串组成的 array,每个元素都是 string 的一个子串,它们被字符串 delimiter 作为边界点分割出来。
如果 delimiter 为空字符串(""),explode() 将返回 FALSE。 如果 delimiter 所包含的值在 string 中找不到,
并且使用了负数的 limit , 那么会返回空的 array, 否则返回包含 string 单个元素的数组。
使用:
$str = 'a,b,c';
$arr = explode(",", $str);
var_export($arr);    //array ( 0 => 'a', 1 => 'b', 2 => 'c', )
(2)、str_split — 将字符串转换为数组
语法:array str_split ( string $string [, int $split_length = 1 ] )
参数说明:
参数            说明
string            输入字符串。
split_length    每一段的长度。
返回值:
如果指定了可选的 split_length 参数,返回数组中的每个元素均为一个长度为 split_length 的字符块,否则每个字符块为单个字符。
如果 split_length 小于 1,返回 FALSE。如果 split_length 参数超过了 string 超过了字符串 string 的长度,整个字符串将作为数组仅有的一个元素返回。
使用:
$str = "Hello World";
$arr1 = str_split($str);
$arr2 = str_split($str, 3);
var_export($arr1);    //array ( 0 => 'H', 1 => 'e', 2 => 'l', 3 => 'l', 4 => 'o', 5 => ' ', 6 => 'W', 7 => 'o', 8 => 'r', 9 => 'l', 10 => 'd', )
var_export($arr2);    //array ( 0 => 'Hel', 1 => 'lo ', 2 => 'Wor', 3 => 'ld', )

5、字符串替换
1)、substr_replace — 替换字符串的子串
语法:mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
参数说明:
参数            说明
string            要操作的字符串
replacement     替换字符串。
start             如果 start 为正数,替换将从 string 的 start 位置开始。
如果 start 为负数,替换将从 string 的倒数第 start 个位置开始。
length             如果设定了这个参数并且为正数,表示 string 中被替换的子字符串的长度。
如果设定为负数,它表示待替换的子字符串结尾处距离 string 末端的字符个数。如果没有提供此参数,那么它默认为 strlen( string ) (字符串的长度)。
当然,如果 length 为 0,那么这个函数的功能为将 replacement 插入到 string 的 start 位置处。
返回值:返回结果字符串。如果 string 是个数组,那么也将返回一个数组。
使用:
echo substr_replace('abcdefg', '***', 1);        //输出 a***
echo substr_replace('abcdefg', '***', 1, 2);    //输出 a***defg
echo substr_replace('abcdefg', '***', -3, 2);    //输出 abcd***g
echo substr_replace('abcdefg', '***', 1, -2);    //输出 a***fg
2)、str_replace — 子字符串替换
|
-->

6、字符串 XHTML格式化显示
1)、nl2br — 在字符串所有新行之前插入 HTML 换行标记
语法:string nl2br ( string $string [, bool $is_xhtml = TRUE ] )    //在字符串 string 所有新行之前插入 '<br />' 或 '<br>',并返回。
参数说明:
参数        说明
string        输入字符串。
is_xhtml    是否使用 XHTML 兼容换行符。
返回值:
返回调整后的字符串
使用:
(1)、使用范例
代码:echo nl2br("是时候换行\n 显示了");
结果查看页面源代码显示:
是时候换行<br />
显示了
(2)、使用 is_xhtml 生成合法的 HTML 标记
代码:echo nl2br("Hello\r\nWorld", false);
结果查看页面源代码显示:
Hello<br>
World
(3)、各种换行分隔符
代码:
$string = "Hello\r\nare\n\ryou\n!\r";
echo nl2br($string);
结果查看页面源代码显示:
Hello<br />
are<br />

you<br />
!<br />

2)、htmlspecialchars() 函数把一些特殊字符转换为 HTML 实体,返回一个字符串。
语法:tring htmlspecialchars( string string )
转换的特殊字符如下:
& 转换为 &amp;
" 转换为 &quot;
< 转换为 &lt;
> 转换为 &gt;
使用:
echo htmlspecialchars('<a href="http">Http</a>');    //输出 <a href="http">Http</a>
Note:要把所有特殊字符转换为 HTML 实体请使用 htmlentities() 。
3)、htmlspecialchars_decode() 把一些 HTML 实体转换为特殊字符,返回一个字符串,为 htmlspecialchars() 的反函数。
语法:string htmlspecialchars_decode()( string string )
转换的实体如下:
&amp; 转换为 &
&quot; 转换为 "
&lt; 转换为 <
&gt; 转换为 >
使用:
echo htmlspecialchars_decode('<a href="http">Http</a>');    //输出结果为超链接 Http
Note:要把所有 HTML 实体转换为特殊字符请使用 htmlentities_decode() 。

 PHP substr(),mb_substr(),mb_strcut()比较
PHP str_replace() 函数详解\