Abstract: PHP中的运算符、字符串操作和流程控制

1. PHP运算符

字符串和数字进行比较时,把字符串转成数字,然后比较。

NULL False ‘’ [] 0 布尔值均为False

2. PHP常用函数

函数名称 作用
addslashes($string) ‘ “ 空 \ 前添加\,转移特殊字符,防御SQL注入
bin2hex() 计算ASCII码
chr(ascii: 0x) ASCII码转换成字符
crypt(‘passwd’ , salt) 加密函数
md5($str) hash计算
explode(‘.’, $str) 根据提供的字符,来切割字符串,结果是一个数组
htmlspecialchars($payload) ‘ “ < > & 转义特殊字符为html实体编码,防御xss
implode(‘.’, $str ) 返回一个由数组元素组合成的字符串
str_ireplace(sear,rep, subj) 替换字符串
strchr(haystack, needle) 查找字符串,并返回字符串之后的所有内容
strcmp(str1, str2) 比较字符串,区分大小写
strlen($str) 计算字符串长度
substr(str, start, length) 字符串截取,按“位”截取
mb_substr(str, start, length) 同上,按“字”截取
trim($str) 去除两侧空白字符

PHP String函数

  • addslashes()函数返回在预定义的字符前添加反斜杠的字符串

    预定义字符是:

    1
    2
    3
    4
    * 单引号(')
    * 双引号(")
    * 反斜杠(\)
    * NULL
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$str = addslashes("what does "yolo" mean?");
echo $str;
echo PHP_EOL;
$str = addslashes("what does 'yolo' mean?");
echo $str;
echo PHP_EOL;
$str = addslashes("what does \yolo\ mean?");
echo $str;
echo PHP_EOL;
$str = addslashes("what does \x00 mean?");
echo $str;
?>

OUT

1
2
3
4
5
6
/*
what does \"yolo\" mean?
what does \'yolo\' mean?
what does \\yolo\\ mean?
What does \0 mean?
*/
  • bin2hex()把ASCII值返回字符;chr()把指定ASCII值返回字符。
1
2
3
4
5
6
7
8
<?php
echo bin2hex("\n");
echo PHP_EOL;
echo chr(0x61);
echo PHP_EOL;
$str = bin2hex("Hello World!");
echo($str);
?>

OUT

1
2
3
4
5
/*
0a
a
48656c6c6f20576f726c6421
*/
  • crypt(str, salt)返回使用DES、Blowfish或MD5算法加密的字符串
  • md5()计算字符串的MD5散列
1
2
3
4
5
6
7
<?php

echo crypt('123456', 'rl');
$str = 'hello';
echo md5($str);

?>
1
* explode(separator, string, limit)使用一个字符串分割另一个字符串,并返回字符串组成的数组
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$a = array();
$url = 'https://www.baidu.com';
$url = explode('.', $url);
$host = $url[0];
$name = $url[1];
$or = $url[2];
echo $host;
echo PHP_EOL;
echo $name;
echo PHP_EOL;
echo $or;
echo PHP_EOL;
echo ($a==0);
?>

OUT

1
2
3
4
5
/*
https://www
baidu
com
*/
1
* htmlentities()函数把字符转换为HTML实体
1
2
3
4
<?php
$str = "<© W3CSçh°°¦§>";
echo htmlentities($str);
?>

OUT

1
2
3
/*
&lt;&copy; W3CS&ccedil;h&deg;&deg;&brvbar;&sect;&gt;
*/
  • htmlspecialchars(string, flags, character-set, double_encode) 函数把一些预定义的字符转换为 HTML 实体
    • & —> $amp
      • “ —> &quot
    • ‘ —> ‘
    • < —> &lt
    • > —> &gt
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php

$payload = '<img src="a" onerror="alert(1)">';
echo htmlspecialchars($payload);

$str = "This is some <b>bold</b> text.";
echo htmlspecialchars($str);
echo array()==null;
echo PHP_EOL;
$str = "<© W3CSçh°°¦§>";
echo htmlentities($str);

?>

OUT

1
2
3
4
5
6
7
/*
&lt;img src=&quot;a&quot; onerror=&quot;alert(1)&quot;&gt;
This is some &lt;b&gt;bold&lt;/b&gt; text.
1
&lt;&copy; W3CS&ccedil;h&deg;&deg;&brvbar;&sect;&gt;

*/
1
* import(separator, array)返回一个由数组元素组成字符串
1
2
3
4
5
6
<?php

$arr = array('Hello','World!','Beautiful','Day!');
echo implode(" ",$arr);

?>

OUT

1
2
3
/*
Hello World! Beautiful Day!
*/
1
2
* str_ireplace(find, replace, string, count)替换字符串中一些字符(不区分大小写) 
* strchr(string, search,before_search)搜索字符串在另一字符串中第一次出现
  • strcmp(sting1, string2)比较两个字符串
    • 返回0 - 如果两个字符相等
    • 返回<0 - string1<string2
    • 返回>0 - string1>string2
  • trim()移除字符串两侧空白字符或其他预定义字符
1
2
3
4
5
6
7
8
9
10
11
<?php
echo str_ireplace("WORLD", "Peter", "Hello world!");
echo PHP_EOL;
echo strchr("Hello world!","world");
echo PHP_EOL;
echo strcmp("Hello world!","Hello world!");
echo PHP_EOL;
$str = "Hello World!";
echo $str . "<br>";
echo trim($str,"Hed!");
?>

OUT

1
2
3
4
5
6
/*
Hello Peter!
world!
0
Hello World!<br>llo Worl
*/
  • substr(str, start, length)函数返回字符串的一部分;按”位“截取

  • mb_substr(str, start, length)函数返回字符串的一部分,按”字“截取

    • start

      正数—字符串指定位置开始

      负数—从字符串结尾指定位置开始

      0 —字符串第一个字符处开始

    • length

      正数—从start参数所在位置返回

      负数—从字符串末端返回

1
2
3
4
<?php
echo substr("Hello World !",0, 5); // 字符串截取,按照`位`截取
echo mb_substr("abc你好!菜鸟!",0, 4); // 字符串截取,按照`字`截取
?>