php的filter_var()在.html页面使用导致代码异常输出的情况,请问是什么原因??
具体如下:当文件名为header1.php时,代码如下:
<?php
//通知浏览器要发送文本的类型和字符集形式
header('Content-Type: text/html; charset = UTF-8');

//开始一个会话
session_start(); //设置会话值
$_SESSION['user_id'] = 1;
$_SESSION['user_tz'] = 'America/New_York'; //连接数据库
require_once('../mysqli_connect.php'); //判断get方式传递的$lid变量是否存在且为不小于1的整数

echo filter_var($_GET['lid'], FILTER_VALIDATE_INT, array('min_range'=>1));
/*if(isset($_GET['lid']) && 
 filter_var($_GET['lid'], FILTER_VALIDATE_INT, array('min_range'=> 1))
)
{
//设置会话值
$_SESSION['lid'] = $_GET['lid'];
}else{
$_SESSION['lid'] = 1; //默认值
}
*/
?>
运行后,浏览器输出如下:即页面上为空。当将上述代码文件名修改为header1.html后再运行,结果如下:
若在header1.html中删除与filter_var()相关的代码,具体如下:
<?php
//通知浏览器要发送文本的类型和字符集形式
header('Content-Type: text/html; charset = UTF-8');

//开始一个会话
session_start(); //设置会话值
$_SESSION['user_id'] = 1;
$_SESSION['user_tz'] = 'America/New_York'; //连接数据库
require_once('../mysqli_connect.php'); //判断get方式传递的$lid变量是否存在且为不小于1的整数


?>
运行后:
注:上述代码只是为了测试filter_var()在.html中的使用情况截取出来的。请问是我不正确的使用造成的还是其他原因呢??期待大家的指点!!

解决方案 »

  1.   

    你的代码除 echo filter_var($_GET['lid'], FILTER_VALIDATE_INT, array('min_range'=>1)); 之外并没有输出
    所以出现空页面是很正常的
    echo filter_var($_GET['lid'], FILTER_VALIDATE_INT, array('min_range'=>1));
    只在 $_GET['lid'] 为数值,且值大于等于 1 时有输出
      

  2.   

    首先谢谢回答,我比较想知道的是为什么在文件修改成header.html之后,会出现。应该也是空白吧!!
      

  3.   

    echo filter_var($_GET['lid'], FILTER_VALIDATE_INT, array('min_range'=>1)); 
    当 $_GET['lid'] 的值小于 1(如果 $_GET['lid'] 是字符串,就是 0)时,就会输出空白(实际是 false)
    加上除此以外没有其他输出,所以就是空白页了
      

  4.   


    再次谢谢你的回答!我知道正确的输出就应该是空白页面,这个我已经懂了。现在主要想弄清楚的是当文件后缀为.html时,为什么浏览器会有输出(按道理应该也是空白)?是因为filter_var()不能用在html文件中还是有别的原因??主要是想求证这个问题,谢谢!!
      

  5.   

    html 不经过 php 解析执行,全部代码原样输出(你右键 查看网页源代码)
      

  6.   


    按照你的指导:
    第一步,执行header1.html,其代码如下:
    <?php # Script 17.1 - header1.html// 指示页面编码:
    header ('Content-Type: text/html; charset=UTF-8');
    // 启动会话:
    session_start();var_dump(isset($_GET['lid']));
    var_dump(filter_var($_GET['lid'], FILTER_VALIDATE_INT));
    if (isset($_GET['lid']) && filter_var($_GET['lid'], FILTER_VALIDATE_INT)) {
    $_SESSION['lid'] = $_GET['lid'];
    } elseif (!isset($_SESSION['lid'])) {
    $_SESSION['lid'] = 1; // 
    }?>
    代码运行后,页面为空白:查看网页源代码,如下:
    第二部,在filter_var()中增加了, array('min_range' => 1),header1.html代码变为如下:
    <?php # Script 17.1 - header1.html// 指示页面编码:
    header ('Content-Type: text/html; charset=UTF-8');
    // 启动会话:
    session_start();var_dump(isset($_GET['lid']));
    var_dump(filter_var($_GET['lid'], FILTER_VALIDATE_INT));
    if (isset($_GET['lid']) && filter_var($_GET['lid'], FILTER_VALIDATE_INT, array('min_range' => 1))) {
    $_SESSION['lid'] = $_GET['lid'];
    } elseif (!isset($_SESSION['lid'])) {
    $_SESSION['lid'] = 1; // 
    }?>
    运行如下:网页源代码:
    加入了array('min_range' => 1)感觉filter_var()函数就无法正常执行了。是因为这个参数的影响还是我理解有误或是代码输出不规范???我是在学习《PHP与MySQL动态网站开发》(Larry Ullman)第17章的实例时出现了这个问题。。再次谢谢你的指教!!!
      

  7.   

    .html是不解释php语法的,所以你保存为.html没法运行。查看网页源码出现php的代码。
    需要改为*.php再运行才有结果输出。
      

  8.   

    .html的不解析php语法