PHP预定义超全局数组 $_GET 原理分析

PHP中预定义超全局变量

① 什么是全局变量

<?php
        $a=23;//全局变量,因为该变量在整个作用域(在这个php文件中),都是可见
        function test(){
                //如果希望使用到全局$a;
                global $a;
                $a=45;
        }
        test();
        echo $a;
?>
② 什么是超全局变量
超全局变量除了有全局变量的特点外,可以无须申明,直接使用.
快速入门
        //超全局变量
        $_SERVER['hsp']="韩顺平";
        echo "<pre>";
        echo print_r($_SERVER);
        echo "</pre>"
提供超全局数组的原因是为了让程序员更方便快捷的写出PHP程序.
③ PHP供提供了九种超全局变量
1. $_GET
2. $_POST
3. $_REQUEST
4. $_SERVER
5. $_ENV
6. $_FILE
7. $_COOKIE
8. $_SESSION
9. $GLOBALS
现在一个一个讲解
1.$_GET

$_GET 实际使用.
        客户机(浏览器)通过超链接传送信息给服务器

案例1
test.php页面
<?php
        //urlencode编码
        echo "<a href='a.php?city=北京好&name=xiaoming'>传送数据</a>";
?>
面试题: 请问如何处理超链接提交数据的中文乱码问题?
1. 对于高版本的ie 浏览器,无需处理
2. 对应 5.5 和 6.0 ie需要进行urlencode()编码处理
3. 尽量使用字母和数字.
a.php页面
<?php

        echo "<pre>";
        echo print_r($_GET);
        echo "</pre>";

        //如果希望指定取出某个数据,则可以通过下标名
        echo $_GET['name'];

?>

ie5.5 和 ie 6的中文奇数乱码问题解决方案:
解决方法1.
给奇数中文加一个全角空格,然后到服务器接收是,去掉两头的空行 trim()
解决方法2:
使用urlencode 和 urldecode函数

在test.php页面
<?php

        //这句话是对中文url编码.        
        $str=urlencode("北京好");

        echo "<a href='a.php?city=".$str."&name=xiaoming'>传送数据</a>";
?>

//在a.php 页面中,正常接收。
<?php
        echo "<pre>";
        echo print_r($_GET);
        echo "</pre>";

        //如果希望指定取出某个数据,则可以通过下标名,如果php版本低,可能看到是中文,需要使用 urldecode() 来解密
        echo "--".$_GET['city'];
?>

_GET也可以接收表单以get方式提交数据
<form action=”a.php” method=”get”>
//....
</from>
特别说明如何提交表单数据建议使用POST,不要使用GET
使用细节:
   如何判断是否收到值
a.php    
if(empty($_GET['city'])){
               
                echo "没有收到";
        }else{
                echo "有city";
                echo $_GET['city'];
        }
//这个方法可以,参看,建议使用empty
if(!isset($_GET['city'])){             
                echo "没有收到hello";
        }else{
                echo "有city";
                echo $_GET['city'];
        }
绝对不要启用register_globals   需要 register_globals = Off
防止SQL注入


你可能感兴趣的:(PHP预定义超全局数组 $_GET 原理分析)