PHP字符串

1.echo和print

PHP是弱类型语言,所以其它类型的数据一般可以直接应用于字符串操作函数里,而自动转换成字符串类型,进行处理,如:
echo substr("1234567", 1, 3);

echo substr(123456,1, 3);
是一样的

定义
一般用双引号或单引号标识一个字符串。比如
$str = "i love u";
$str = 'i love u';

它者两者是有一些区别的。后者将一切单引号的内容都会当作字符处理;前者则不然。比如
$test = "iwind";
$str = "i love $test";
$str1 = 'i love $test';
echo $str; //将得到 i love iwind
echo $str1; //将得到 i love $test

同样的以下两个例子的行为也不一样的:
echo "i love \test"; // 将得到 i love est,已经将\t视为转义
echo 'i love \test'; // 将得到 i love \test

从而可以简单认为双引号里的内容是经过“解释”过的,单引号的是“所见即所得”的。显而易见,双引号形式的更为灵活一些,当然单引号会适用于一些特殊的场合,这里就不作阐述了。

输出
PHP里的输出最常用的是echo,print.两者都不是真正的函数,而是语言构造,所以调用时不必用双括号(比如echo("test");print("test")).在输出的时候两者都可以实现赋值:
echo $str="test"; //一方面输出test,一方面把"test"赋给字符串变量 $str
print $str="test";

两者除了名字不一样外,还是有其它区别的。print具有返回值,一直返回1,而echo没有,所以echo比print要快一些:
$return = print "test";
echo $return; // 输出1

也正因为这个原因,print能应用于复合语句中,而echo不能:
isset($str) or print "str 变量未定义"; // 将输出"str 变量未定义"
isset($str) or echo "str 变量未定义";// 将提示分析错误

echo一次可输出多个字符串,而print则不可以:
echo "i ","love ","iwind"; // 将输出 "i love iwind"
print "i ","love ","iwind"; // 将提示错误

echo,print还可以输出被称作“文档句法”的字符串,句法如:
echo <<< 标签名称
...
字符串内容
...
标签名称;

比如
echo <<< test
i love iwind
test;

要注意的是语句开始和结束的两个标签名称是一样的,且后一个标签名称前不能有空白,即要顶格写。文档句法输出的内容识别变量名称和常用符号,大致形同双引号的作用。

2.strlen()来计算字符串的长度,strlen将中日等汉字以及全角字符都当作两个或四个长度计算
好在mbstring或icon两个函数可以帮助解决这个问题
$len = iconv_strlen($str, "GBK");
$len = mb_strlen($str, "GBK");

3.explode()按照某个分隔符把字符串分割成数组,与explode函数有类似功能的有:preg_split(), spliti(), split()等函数

4.implode和join按照某个分隔符把数组分割成字符串

5.trim,rtrim,ltrim删除字符串两边空格,删除右边空格,删除左边空格
其实这三个参数不仅可以去除字符串首尾的空格,还可以去除它们的第二个参数指定的字符,如:
echo trim(",1,2,3,4,", ","); // 将得到 1,2,3,4 两端的","号被裁掉了。

有时还会看到有人使用chop这个函数,其实它是rtrim的同义函数。
加空格函数chunk_split($str,2);向$str字符里面按2个字符就加入一个空格

6.strtoupper,strtolower将其转变成大写或小写。
ucfirst($str) 将函数的第一个字符转换为大写
ucwords($str) 将每个单词的首字母转换为大写

7.PHP里还有这样一组用于字符串比较的函数:strcmp,strcasecmp,strncasecmp(), strncmp(),它们都是如果前者比后者大,则返回大于0的整数;如果前者比后者小,则返回小于0的整数;如果两者相等,则返回0.它们比较的原理与 其它语言的规则都是一样的。
strcmp是用于区分大小写(即大小写敏感)的字符串比较:
echo strcmp("abcdd", "aBcde"); // 返回 1 (>0), 比较的是 "b"和"B"

strcasecmp用于不区分大小写的字符串比较:
echo strcasecmp("abcdd", "aBcde"); // 返回 -1 (<0), 比较的是"d"和"e"

strncmp用于比较字符串的一部分,从字符串的开头开始比较,第三个参数,为要比较的长度:
echo strncmp("abcdd", "aBcde", 3); // 返回 1 (>0), 比较了 abc 和 aBc

strncasecmp用于不区分大小写的比较字符串的一部分,从字符串的开头开始比较,第三个参数,为要比较的长度:
echo strncasecmp("abcdd", "aBcde", 3); // 返回 0, 比较了 abc 和 aBc, 由于不区分大小写,所以两者是相同的。

8.字符串替换函数str_replace("要替换的内容", "要取代原内容的字符串", "原字符串"),str_replace是大小写敏感的
str_replace还可以实现多对一,多对多的替换,但无法实现一对多的替换:
echo str_replace(array("iwind", "kiki"), "people", "i love kiki, iwind said");
将会输出
i love people, people said
第一个参数中的array("iwind", "kiki")都被替换成了"people"

echo str_replace(array("iwind", "kiki"), array("gentle man", "ladies"), "i love kiki, iwind said");
输出 i love ladies, gentle man said 。也就是说第一个数组中的元素被第二个数组中的相对应的元素替换掉了,如果有一个数组比另一个数组元素数要少,那么不足的都会当作空来处理。

9.替换一部分的字符串substr_replace (原字符串, 要替代的字符串, 开始替换的位置 [, 替换的长度])
其中,开始替换的位置从0开始计算,应该小于原字符串的长度。要替换的长度是可选的。
echo substr_replace("abcdefgh", "DEF", 3); // 将输出 "abcDEF"
echo substr_replace("abcdefgh", "DEF", 3, 2); // 将输出 "abcDEFfgh"
第一个例子中,从第三个位置(即"d")开始替换,从而把 "defgh"都替换成了“DEF”
第二个例子中,也是从第三个位置(即"d")开始替换,但只能替换2个长度,即到e,所以就把"de"替换成了"DEF".

10.strstr,stristr.后者与前者的功能,返回值都一样,只是不区分大小写。strstr敏感大小写,stristr不敏感
strstr("母字符串", "子字符串")用来查找子字符串在母字符串中第一次出现的位置,并返回母字符串中从子字符串开始到母字符串结束的部分。比如
echo strstr("abcdefg", "e"); //将输出 "efg"
如果找不到子字符串,则返回空。因为可以用来判断一个字符串中是否含有另外一个字符串

HTML相关
11,htmlspecialchars($string)
这是它的最简单用法,将字符串中的一些特殊字符(顾名思义)&,',"<,>转换成它们对应的HTML实体形式:
$str = "i love <font color=\"red\">kiki</font>, iwind said.";
echo htmlspecialchars($str);
将会输出
i love &lt;font color=&quot;red&quot;&gt;kiki&lt;/font&gt;, iwind said.

12,htmlentities($string)
将所有能转换成实体形式的字符都转换成实体形式。

13,html_entity_decode($string);
PHP4.3.0以后加入的具有与htmlentities($string)相反的功能。

13.nl2br($string)将字符串中所有换行符(\n)转变成<br /> + 换行符

14.查找字符位置函数:
strpos($str,search,[int]):查找search在$str中的第一次位置从int开始;
stripos($str,search,[int]):函数返回字符串在另一个字符串中第一次出现的位置。该函数对大小写不敏感
strrpos($str,search,[int]):查找search在$str中的最后一次出现的位置从int

15.比较字符函数
int strcmp($str1,$str2):$str1&gt;=<$str2分别为正1,0,-1(字符串比较)
strcasecmp() 同上(不分大小写)

strnatcmp("4","14") 按自然排序比较字符串
strnatcasecmp() 同上,(区分大小写)

16.chr、ord--返回指定的字符或ascii

17.数据库相关函数
addslashes($str):使str内单引号(')、双引号(")、反斜线(\)与 NUL
stripslashes() 去除字符串中的反斜杠

18.快速创建数组的函数range()
range(1,9); //用range直接创建1~9共9个数字组成的数组,以“1”开始“9”结束。
range(a,z);还可以创建从a到z 的字符数组
使用字符数组时注意大小写,比如range(A,z)和range(a,Z)是不一样的。
range()函数还具有第三个参数,该参数的作用是设定步长,比如range(1,9,3)创建的数组元素是:1、4、7

19.sort()对数组元素进行升序排序
sort()函数是区分字母大小写的(字母从大到小的顺序是:A…Z…a…z)
rsort()对数组元素进行降序排序

20.shuffle()函数将数组元素进行随机的重新排序

21.array_reverse()函数将数组元素按原顺序反向排序

22.str_repeat() 函数把字符串重复指定的次数。
语法
str_repeat(string,repeat)

参数 描述
string 必需。规定要重复的字符串。
repeat 必需。规定字符串将被重复的次数。必须大于等于 0。
<?php
$str = 'phpjc, ';
echo '重复输出两次:';
echo str_repeat($str,2);
echo '<br/>';
echo '当函数str_repeat()第2个参数为0时:';
echo 's='.str_repeat($str,0);
?>
输出:
重复输出两次:phpjc, phpjc,
当函数str_repeat()第2个参数为0时:s=

23.str_pad() 函数把字符串填充为指定的长度。
语法
str_pad(string,length,pad_string,pad_type)
参数 描述
string 必需。规定要填充的字符串。
length 必需。规定新字符串的长度。如果该值小于原始字符串的长度,则不进行任何操作。
pad_string 可选。规定供填充使用的字符串。默认是空白。
pad_type 可选。规定填充字符串的那边。
可能的值:
STR_PAD_BOTH - 填充到字符串的两头。如果不是偶数,则右侧获得额外的填充。
STR_PAD_LEFT - 填充到字符串的左侧。
STR_PAD_RIGHT - 填充到字符串的右侧。这是默认的。
例子
<?php
$input = "Story";
echo '/'.str_pad($input, 10).'/'; //补全10个长度
echo '<br/>';
echo str_pad($input, 10, "-*", STR_PAD_LEFT); //补全10个长度,从左边开始
echo '<br/>';
echo str_pad($input, 10, "*", STR_PAD_BOTH); //补全10个长度,从两边同时开始
echo '<br/>';
echo str_pad($input, 6 , "***");
?>

输出:
/Story /
-*-*-Story
**Story***
Story*

24.parse_str() 函数把查询字符串解析到变量中。

25.str_split() 函数把字符串分割到数组中。
$str = 'How are you?';
$arr1 = str_split($str);
$arr2 = str_split($str, 3);//三个字符为一个数组元素
echo '<pre>';
print_r($arr1);
print_r($arr2);
echo '</pre>';
Array
(
[0] => H
[1] => o
[2] => w
[3] =>
[4] => a
[5] => r
[6] => e
[7] =>
[8] => y
[9] => o
[10] => u
[11] => ?
)
Array
(
[0] => How
[1] => ar
[2] => e y
[3] => ou?
)

26.ucfirst() 函数把字符串中的首字符转换为大写。

27.ucwords() 函数把字符串中每个单词的首字符转换为大写。

28.substr_replace() 函数把字符串的一部分替换为另一个字符串。
substr_replace(string,replacement,start,length)
string 必需。规定要检查的字符串。
replacement 必需。规定要插入的字符串。
start 必需。规定在字符串的何处开始替换。
正数 - 在第 start 个偏移量开始替换
负数 - 在从字符串结尾的第 start 个偏移量开始替换
0 - 在字符串中的第一个字符处开始替换
charlist 可选。规定要替换多少个字符。
正数 - 被替换的字符串长度
负数 - 从字符串末端开始的被替换字符数
0 - 插入而非替换

29.strtok() 函数把字符串分割为更小的字符串。

30.strrpos() 函数查找字符串在另一个字符串中最后一次出现的位置。
strrpos(string,find,start)
参数 描述
string 必需。规定被搜索的字符串。
find 必需。规定要查找的字符。
start 可选。规定开始搜索的位置。
如果成功,则返回位置,否则返回 false。
注释:该函数对大小写敏感。如需进行大小写不敏感的查找,请使用 strripos()。

31.strrchr() 函数查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符。
如果成失败,否则返回 false。

32.strnatcmp() 函数使用一种“自然”算法来比较两个字符串。
在自然算法中,数字 "2" 小于数字 "10"。在计算机排序中,"2" 大于 "10",这是因为 "2" 大于 "10" 的第一个数字。
该函数返回:
0 - 如果两个字符串相等
<0 - 如果 string1 小于 string2
>0 - 如果 string1 大于 string2
语法
strnatcmp(string1,string2)
参数 描述
string1 必需。规定要比较的第一个字符串。
string2 必需。规定要比较的第二个字符串。
注释:该函数对大小写敏感。

33.strcasecmp() 函数比较两个字符串。
该函数返回:
0 - 如果两个字符串相等
<0 - 如果 string1 小于 string2
>0 - 如果 string1 大于 string2
语法
strcasecmp(string1,string2)
参数 描述
string1 必需。规定要比较的第一个字符串。
string2 必需。规定要比较的第二个字符串。
注释:该函数是二进制安全的,且对大小写不敏感。

34.strip_tags() 函数剥去 HTML、XML 以及 PHP 的标签。

35.preg_split() 函数用正则表达式分割字符串

36.preg_replace()函数执行正则表达式的搜索和替换

37.nl2br() 函数在字符串中的每个新行 (\n) 之前插入 HTML 换行符 (<br />)。
<?php
//一行输出
echo ("foo isn't\n bar");
echo "<br>";
//将\n替换成<br />则两行输出
echo nl2br("foo isn't\n bar");
?>
输出:
foo isn't bar
foo isn't
bar


PHP是弱类型语言,所以其它类型的数据一般可以直接应用于字符串操作函数里,而自动转换成字符串类型,进行处理,如:
echo substr("1234567", 1, 3);

echo substr(123456,1, 3);
是一样的

定义
一般用双引号或单引号标识一个字符串。比如
$str = "i love u";
$str = 'i love u';

它者两者是有一些区别的。后者将一切单引号的内容都会当作字符处理;前者则不然。比如
$test = "iwind";
$str = "i love $test";
$str1 = 'i love $test';
echo $str; //将得到 i love iwind
echo $str1; //将得到 i love $test

同样的以下两个例子的行为也不一样的:
echo "i love \test"; // 将得到 i love est,已经将\t视为转义
echo 'i love \test'; // 将得到 i love \test

从而可以简单认为双引号里的内容是经过“解释”过的,单引号的是“所见即所得”的。显而易见,双引号形式的更为灵活一些,当然单引号会适用于一些特殊的场合,这里就不作阐述了。

输出
PHP里的输出最常用的是echo,print.两者都不是真正的函数,而是语言构造,所以调用时不必用双括号(比如echo("test");print("test")).在输出的时候两者都可以实现赋值:
echo $str="test"; //一方面输出test,一方面把"test"赋给字符串变量 $str
print $str="test";

两者除了名字不一样外,还是有其它区别的。print具有返回值,一直返回1,而echo没有,所以echo比print要快一些:
$return = print "test";
echo $return; // 输出1

也正因为这个原因,print能应用于复合语句中,而echo不能:
isset($str) or print "str 变量未定义"; // 将输出"str 变量未定义"
isset($str) or echo "str 变量未定义";// 将提示分析错误

echo一次可输出多个字符串,而print则不可以:
echo "i ","love ","iwind"; // 将输出 "i love iwind"
print "i ","love ","iwind"; // 将提示错误

echo,print还可以输出被称作“文档句法”的字符串,句法如:
echo <<< 标签名称
...
字符串内容
...
标签名称;

比如
echo <<< test
i love iwind
test;

要注意的是语句开始和结束的两个标签名称是一样的,且后一个标签名称前不能有空白,即要顶格写。文档句法输出的内容识别变量名称和常用符号,大致形同双引号的作用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值