PHPDay07:处理html标签的函数,处理int的函数,处理float的函数,count,foreach,each,list,预定义数组

目录

 

0x00 处理html标签的函数:

0x01 处理integer整型 的函数

0x02 处理float的函数

0x05 处理数组的系统函数

0x06 数组的遍历:

1.count(数组)

2.foreach:

3.each(数组名)

4.list(变量1,变量2,变量3....) = 数组

0x07 9大预定义数组

1.$_SERVERS

2.$_ENV

3.$_GET:

4.$_POST:

5.$_REQUEST

6.$_FILES

7.$GLOBALS

9.$_SESSION


0x00 处理html标签的函数:

1.nl2br(字符串):

@让文本换行符\n在网页中产生换行效果。(其实就是将原文中\b全部替换成<br/>)

@返回值为可以产生换行效果的字符串。

<?php
$str = '我是第一行\n我是第二行';
$str2 = "我是第一行\n我是第二行";
echo $str;
echo $str2;
?>

注意:

1.只有双引号中的\n才会被解析,单引号将其看做字符串输出。

2.\n表示文本换行。所以被解析后只会在查看源代码时起作用。

网页中的显示:

右键查看源代码的显示情况:

如何让\n在网页中也产生换行效果呢?只要用nl2br转换一下即可。

<?php
$str = '我是第一行\n我是第二行';
$str2 = "我是第一行\n我是第二行";
echo $str;
echo $str2;
echo nl2br($str2);
echo str_replace('\n','<br/>',$str);
//相当于对str进行替换。注意这里如果换成str2的话不能实现换行效果,因为str2中\n已经被解析了。
?>

2.addslashes(字符串)

@给单引号、双引号、反斜线前加反斜线。

@返回转化后的字符串。

<?php
$str1 = 'I Love "xidian"';
echo addslashes($str1);
?>

常用于防sql注入

3.stripslashes(字符串):

@去掉反斜线

@返回转化后的字符串。

<?php
$str1 = 'I Love \"xidian"';
echo stripslashes($str1);
?>

4.htmlspecailchars(字符串)

@将 :

  1. &(和号)转成 &amp;
  2. “(双引号)转成 &quot;
  3. ‘(单引号)转成 &#039; 默认不进行转化,转化需要传入第二个参数ENT_QUOTES(实体_引号entity_quotes)
  4. <(小于号) 转成 &lt;
  5. >(大于号) 转成 &qt;

常用于防xss注入

@返回值为转化后的字符串

<?php
$str  = "hello <script>alert('xss');</script>";
//echo $str;//如果直接echo 将会看到一个alert弹窗。
echo htmlspecialchars($str);
?>

网页效果:

查看源代码:

字符实体的作用:

比如说你想要设置输入栏中中的默认值为xidian's name ,第一种写法肯定不行,因为单引号会发生闭合。

这时,将单引号替换成它的字符实体,那么输入栏的默认值就会是xidian's

<?php
//echo "<input value = 'xidian's name'>";
echo "<input value = 'xidian&#039;s name'>";
?>

网页中的效果:

查看源代码:

5.htmlentities(字符串)

@可以将所有 有字符实体的特殊字符全部进行转换,而htmlspecialchars只能对以上5种特殊字符进行转化

@返回值为转换后的字符串。

6.strip_tags(字符串)

@将字符串中含有的html标签直接去除。注意htmlspecialchars是将标签的括号转化为实体(不会被解析),所以在网页中标签只是作为字符串输出了出来,没有消失。

@返回值为转换后的字符串。

<?php
$str  = "hello <script>alert('xss');</script>";
//echo $str;
echo htmlspecialchars($str,ENT_QUOTES);
echo strip_tags($str);
?>

7.strcmp(字符串1,字符串2)

@如果字符串1小于字符串2 返回值小于0,如果相等 =0 否则 大于0(区分大小写)

@返回值为 int

<?php
$str1 = 'hello';
$str2 = 'Hello';
echo strcmp($str1,$str2);//32
?>

8.strcasecmp($str1,$str2)

@比较两个字符串,不区分大小写,其他同上。

@返回值为int类型

<?php
$str1 = 'hello';
$str2 = 'Hello';
echo strcasecmp($str1,$str2);

function myStrCaseCmp($str1,$str2){
    return strtolower($str1) === strtolower($str2);
}
echo myStrCaseCmp($str1,$str2);
?>

9.strstr(字符串,子串)

@在字符串中查找子串的位置,如果找到了,就将该位置之后的所有字符组成的字符串返回。

@如果没有找到,则返回空。

<?php
$str1 = 'hello';
$str2 = 'll';
echo strstr($str1,$str2);//llo
?>

10.strpos(字符串,子串)

@在字符串中寻找子串

@返回子串的位置,如果没有找到则返回空。

strstr返回的是str strpos返回的是pos

<?php
$str1 = 'hello';
$str2 = 'llo';
echo strpos($str1,$str2);//2
?>

0x01 处理integer整型 的函数

1.abs(数字)

@取绝对值

@返回值为 int

2.bindec()

@二进制转十进制

<?php
echo bindec(1010);
?>

3.decbin()

@十进制转二进制

<?php
$b = 10;
echo decbin($b);
?>

4.floor()

@向下取整

5.ceil()

@向上取整

比说你有10条数据,每页显示3条,那么应该分多少页呢?这就要用到向上取整

<?php
$total =10;
$perPage = 3;
$numPage = ceil($total / $perPage); 
?>

6.round()

@四舍五入

7.max(数组)

@返回数组中的最大值;

@max(数字,数字,数字。。。) 也可以

<?php
$arr = [12,323,32,45,666];
echo max($arr);
?>

8.min()

9.rand(起始数字,末尾数字)

@在指定区间生成一个随机数,并返回

例如:产生六位随机验证码

<?php
$num = rand(100000,999999);
echo $num;
?>

10.mt_rand(起始数字,末尾数字)

用法同上,功能也同上,但是效率比上面的函数快。推荐使用该函数。

0x02 处理float的函数

1.num_format(小数,保留小数点后多少位,'.',',')

@格式化输出小数

@返回值为string类型

<?php
$num = 123231244.24142133;
echo number_format($num,2,'.',',');//123,231,244.24
?>

0x03 重写strrev

<?php
$str = 'hello world';
function MyStrRev($str){
	for($i =0;$i<strlen($str)/2;$i++){
		$buff = $str[$i];
		$str[$i] = $str[strlen($str)-$i-1];
		$str[strlen($str)-$i-1] = $buff; 
	}
	return $str;
}
echo MyStrRev($str);
?>

方法二:

<?php
$str = 'hello world';
function MyStrRev($str){
    $ret = '';
    $len = strlen($str) -1;
	for($i = $len;$i>=0;$i--){
        $ret.=$str[$i];
	}
	return $ret;
}
echo MyStrRev($str);
?>

中文处理版本:

<?php
$str = '你好';
function MyStrRev($str){
    $ret = '';
    $len = mb_strlen($str) -1;
	for($i = $len;$i>=0;$i--){
        $ret.=mb_substr($str,$i,1);
	}
	return $ret;
}
echo MyStrRev($str);
?>

0x04 手写MyStrSplit();

<?php
$slogan = 'hello world';
function MyStrSplit($str,$step = 1){
    $list = [];
    $index = 0;
    for($i =0;$i<mb_strlen($str);$i+=$step){
        $list[$index++] = mb_substr($str,$i,$step); 
    }
    return $list;
}
var_dump(MyStrSplit($slogan,2));
?>

0x05 处理数组的系统函数

数组的定义五种方式复习:

<?php
$arr1 = array(1,2,3);
$arr2 = array('a'=>'1','b'=>'2','c'=>'3');
$arr3 = [1,2,3,'hello world'];//推荐

$arr4['a'] = 123;
$arr4['b'] = 222;

$arr5[] = 1;//$arr[0] =1;
$arr5[] = 2;//$arr[1] =2;
$arr5[] = 3;
?>

二维数组:

<?php
$arr =['a'=>[1,2,3],'b'=>[3,2,1]];
$arr1=[[1,2,3],c] //可以二维和一维混用
?>

0x06 数组的遍历:

1.count(数组)

@返回值为数组的长度

<?php
$arr = array(1,2,3);
for($i =0;$i<count($arr);$i++){
    echo $arr[$i];
    echo '<br/>';
}
?>

遍历二维数组:

<?php
$users = [
['username'=>'liudehua','age'=>'12'],
['username'=>'zhangyuhao','age'=>'33'],
['username'=>'liuyong','age'=>'32'],
];
for($i =0;$i<count($users);$i++){
   echo $users[$i]['username'].'<br/>';
   echo $users[$i]['age'].'<br/>';
}
?>

显然,for循环无法遍历关联数组,上例中我们通过自己枚举来遍历关联数组。

但是如果二维数组中数组的元素很多呢?

这就需要用到foreach了。

2.foreach:

foreach(数组名 as 键名=>值名){

}

将索引数组中的每一个元素(键值对)的键赋值给“键名”,值赋值给“值名”

键名 和 值名 可以自己随便命名。

<?php
$users = [
['username'=>'liudehua','age'=>'12'],
['username'=>'zhangyuhao','age'=>'33'],
['username'=>'liuyong','age'=>'32'],
];
for($i =0;$i<count($users);$i++){
  foreach($users[$i] as $key=>$value){
      echo $key.':'.$value.'<br/>';
  }
}
?>

也可以直接省略键名,只取值名

foreach(数组名 as 值名)

总结:

for循环适合遍历索引数组

foreach 循环适合遍历关联数组,当然也可以用来遍历索引数组。

3.each(数组名)

传入一个数组,第一次调用返回第一个键值对,第二次调用返回第二个键值对。第三次调用返回第三个键值对。。。

返回的键值对实际上是一个包含了键和值的混合数组:

这个数组可以通过索引来访问键值:0 对应 键 1对应值

也可以通过关联的方式来访问:key 对应 键 value对应值

<?php
$users = [
['username'=>'liudehua','age'=>'12','pwd'=>'123456'],
['username'=>'zhangyuhao','age'=>'33'],
['username'=>'liuyong','age'=>'32'],
];
echo '<pre>';
var_dump(each($users[0]));
echo '<pre/>';
for($i =0;$i<3;$i++){
    $ret = each($users[0]);
    
    //通过索引数组的方式访问
    echo $ret[0].'<br/>';
    echo $ret[1].'<br/>';
    
    //通过关联数组的方式访问
    echo $ret['key'].'<br/>';
    echo $ret['value'].'<br/>';
}

?>

4.list(变量1,变量2,变量3....) = 数组

将数组中的 索引变量 逐个赋值给 list中的变量。类似于解包.

<?php
$users = ['username'=>'wenmofen','pwd'=>'123','liudehua','apple'];
list($name,$fruit) = $users;
echo $name.'<br/>';
echo $fruit.'<br/>';
?>

list 可以和 each 结合使用

<?php
$users = ['username'=>'wenmofen','pwd'=>'123','liudehua','apple'];
list($key,$value) = each($users);
echo $key.'<br/>';
echo $value.'<br/>';
?>
<?php
$users = ['username'=>'wenmofen','pwd'=>'123','liudehua','apple'];
while(list($key,$value) = each($users)){
    echo $key.'<br/>';
    echo $value.'<br/>';
}
?>

0x07 9大预定义数组

1.$_SERVERS

该数组中存储和服务器相关的一系列信息,一共有79个键值对

array(30) {
  ["HTTP_HOST"]=>
  string(14) "localhost:8888"
  ["HTTP_USER_AGENT"]=>
  string(82) "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:71.0) Gecko/20100101 Firefox/71.0"
  ["HTTP_ACCEPT"]=>
  string(63) "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
  ["HTTP_ACCEPT_LANGUAGE"]=>
  string(59) "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2"
  ["HTTP_ACCEPT_ENCODING"]=>
  string(13) "gzip, deflate"
  ["HTTP_CONNECTION"]=>
  string(10) "keep-alive"
  ["HTTP_UPGRADE_INSECURE_REQUESTS"]=>
  string(1) "1"
  ["HTTP_CACHE_CONTROL"]=>
  string(9) "max-age=0"
  ["PATH"]=>
  string(29) "/usr/bin:/bin:/usr/sbin:/sbin"
  ["SERVER_SIGNATURE"]=>
  string(0) ""
  ["SERVER_SOFTWARE"]=>
  string(161) "Apache/2.2.34 (Unix) mod_wsgi/3.5 Python/2.7.13 PHP/7.3.1 mod_ssl/2.2.34 OpenSSL/1.0.2o DAV/2 mod_fastcgi/mod_fastcgi-SNAP-0910052141 mod_perl/2.0.9 Perl/v5.24.0"
  ["SERVER_NAME"]=>
  string(9) "localhost"
  ["SERVER_ADDR"]=>
  string(3) "::1"
  ["SERVER_PORT"]=>
  string(4) "8888"
  ["REMOTE_ADDR"]=>
  string(3) "::1"
  ["DOCUMENT_ROOT"]=>
  string(25) "/Applications/MAMP/htdocs"
  ["SERVER_ADMIN"]=>
  string(15) "[email protected]"
  ["SCRIPT_FILENAME"]=>
  string(35) "/Applications/MAMP/htdocs/index.php"
  ["REMOTE_PORT"]=>
  string(5) "52579"
  ["GATEWAY_INTERFACE"]=>
  string(7) "CGI/1.1"
  ["SERVER_PROTOCOL"]=>
  string(8) "HTTP/1.1"
  ["REQUEST_METHOD"]=>
  string(3) "GET"
  ["QUERY_STRING"]=>
  string(0) ""
  ["REQUEST_URI"]=>
  string(1) "/"
  ["SCRIPT_NAME"]=>
  string(10) "/index.php"
  ["PHP_SELF"]=>
  string(10) "/index.php"
  ["REQUEST_TIME_FLOAT"]=>
  float(1578043044.252)
  ["REQUEST_TIME"]=>
  int(1578043044)
  ["argv"]=>
  array(0) {
  }
  ["argc"]=>
  int(0)
}

几个重要的键值对:

1.OS:获取服务器操作系统的信息,我这台电脑上貌似没有这个键值对

2.HTTP_USER_AGENT:获取用户浏览器的相关信息。

3.SERVER_NAME:服务器的域名

4.SERVER_PORT:服务器的端口

5.SERVER_ADDR:服务器的ip地址

6.REMOTE_ADDR:用户的ip地址

7.DOCUMENT_ROOT:代码所在的文档根目录 Nginx配置文件中配置的根目录

8.SCRIPT_NAME:脚本名称

DOCUMENT_ROOT + SCRIPT_NAME  = 脚本的绝对路径

2.$_ENV

array(16) {
  ["SHELL"]=>
  string(9) "/bin/bash"
  ["TMPDIR"]=>
  string(49) "/var/folders/tj/sjr_3yqn35g72vzjbwt3wcb80000gn/T/"
  ["Apple_PubSub_Socket_Render"]=>
  string(48) "/private/tmp/com.apple.launchd.fFUKmuBgJz/Render"
  ["USER"]=>
  string(3) "mac"
  ["COMMAND_MODE"]=>
  string(8) "unix2003"
  ["SSH_AUTH_SOCK"]=>
  string(51) "/private/tmp/com.apple.launchd.kqBWYDWHi6/Listeners"
  ["__CF_USER_TEXT_ENCODING"]=>
  string(15) "0x1F5:0x19:0x34"
  ["PATH"]=>
  string(29) "/usr/bin:/bin:/usr/sbin:/sbin"
  ["PWD"]=>
  string(1) "/"
  ["XPC_FLAGS"]=>
  string(3) "0x0"
  ["XPC_SERVICE_NAME"]=>
  string(1) "0"
  ["HOME"]=>
  string(10) "/Users/mac"
  ["SHLVL"]=>
  string(1) "2"
  ["LOGNAME"]=>
  string(3) "mac"
  ["SECURITYSESSIONID"]=>
  string(5) "186a8"
  ["_"]=>
  string(36) "/Applications/MAMP/Library/bin/httpd"
}

注:能不能打印出来$_ENV变量取决于php.ini配置文件中的variable_order = "EGPCS"中有没有E

G 表示 GET P:POST C:COOKIE S:表示SERVER

3.$_GET:

get传参:如果传递多个参数,参数之间用&隔开

传参时字符串不用加引号,可以直接写。

<!DOCTYPE html>
<head>
    <meta charset = "utf-8">
</head>
<body>
<a href = './index2.php?a=111&b=123&c=xidian'>跳转到index2</a>
</body>
</html>

传参方式二:通过form表单传参

<!DOCTYPE html>
<head>
    <meta charset = "utf-8">
</head>
<body>
<form action="./index2.php" method="get">
    用户名:<input type="text" name="username"><br/>
    密码:<input type = "text" name="pwd"><br/>
    <input type="submit" value="提交"><br/>
</form>
</body>
</html>

点击提交后,form表单中的input框中 name 和 value 的值会组成键值对,传递给$_GET数组。

4.$_POST:

通常用来接收表单传参

5.$_REQUEST

不论是GET方法传参还是POST方法传参,$_REQUEST都可以接收。但是不推荐用,因为速度比较慢。

6.$_FILES

用于接收表单中上传文件的一些相关信息。

表单上传文件需注意:

1.必须用post方法

2表单必须加一个属性:enctype="mulitpart/form-data" 编码方式=“mulitpart/form-data”

<!DOCTYPE html>
<head>
    <meta charset = "utf-8">
</head>
<body>
<form action="./index2.php" method="post" enctype = "multipart/form-data">
    用户名:<input type="text" name="username"><br/>
    密码:<input type = "text" name="pwd"><br/>
    选择文件:<input type="file" name="file" id="">
    <input type="submit" value="提交"><br/>
</form>
</body>
</html>

array(2) {
  ["username"]=>
  string(9) "大萨达"
  ["pwd"]=>
  string(6) "大叔"
}
array(1) {
  ["file"]=>
  array(5) {
    ["name"]=>
    string(13) "马中马.php"
    ["type"]=>
    string(8) "text/php"
    ["tmp_name"]=>
    string(36) "/Applications/MAMP/tmp/php/phpcGSrLo"
    ["error"]=>
    int(0)
    ["size"]=>
    int(71)
  }
}


7.$GLOBALS

存储了包括自己在内的9个预定义数组。

同时,脚本中的全局变量也会存在$GLOBALS中,通过$GLOBALS可以将它“提升”为一个超全局变量。

例如:

<?php
$username = 'liudehua';
function printName(){
    echo $username;//error 因为username是一个全局变量,作用域没有这么大
    echo $GLOBALS['username'];//right!因为GLOBALS是一个超全局变量。
}
?>

注意:只有它没有下划线

array(5) {
  ["_GET"]=>
  array(0) {
  }
  ["_POST"]=>
  array(2) {
    ["username"]=>
    string(9) "大萨达"
    ["pwd"]=>
    string(6) "大叔"
  }
  ["_COOKIE"]=>
  array(0) {
  }
  ["_FILES"]=>
  array(1) {
    ["file"]=>
    array(5) {
      ["name"]=>
      string(13) "马中马.php"
      ["type"]=>
      string(8) "text/php"
      ["tmp_name"]=>
      string(36) "/Applications/MAMP/tmp/php/phpjeiqMU"
      ["error"]=>
      int(0)
      ["size"]=>
      int(71)
    }
  }
  ["GLOBALS"]=>
  array(5) {
    ["_GET"]=>
    array(0) {
    }
    ["_POST"]=>
    array(2) {
      ["username"]=>
      string(9) "大萨达"
      ["pwd"]=>
      string(6) "大叔"
    }
    ["_COOKIE"]=>
    array(0) {
    }
    ["_FILES"]=>
    array(1) {
      ["file"]=>
      array(5) {
        ["name"]=>
        string(13) "马中马.php"
        ["type"]=>
        string(8) "text/php"
        ["tmp_name"]=>
        string(36) "/Applications/MAMP/tmp/php/phpjeiqMU"
        ["error"]=>
        int(0)
        ["size"]=>
        int(71)
      }
    }
    ["GLOBALS"]=>
    *RECURSION*
  }
}


9.$_SESSION

发布了156 篇原创文章 · 获赞 19 · 访问量 8953

猜你喜欢

转载自blog.csdn.net/weixin_43415644/article/details/103691606