比如我表单post过来了sha1('1')这个加密后的字符串356a192b7913b04c54574d18c28d46e6395428ab。
然后我if($_POST['s']=='356a192b7913b04c54574d18c28d46e6395428ab')
为什么判断为false?
echo $_POST['s']也是356a192b7913b04c54574d18c28d46e6395428ab啊。。

解决方案 »

  1.   

    仔细检查一下 $_POST['s'] 是不是那个值
      

  2.   

    我对过的没错阿我在BAE试的。。一直不明白为什么
      

  3.   

    你不如用 var_dump() 看看是否包含了空格换行什么的
      

  4.   

    没有的。。而且我也用trim()过滤了的说。。你能不能帮我看看呢。http://hole.icnu.me/t1.php我复制他的var_dump()输出的引号+值就可以是true。
    自己手打引号就是false这是为什么啊??
      

  5.   

    t.php的代码。。
    <?php
    echo $_POST['set'].'<br>';
    var_dump($_POST['set']);
    if($_POST['set']=="f45918a75f152c9ce0b58043d5e5d7f22358665c")echo 'qw';
    ?>
    就是if里面那个双引号手打就false。。不知为什么
    http://hole.icnu.me/t1.php 这里post到t.php
      

  6.   

    我要重新描述一下了
    sha1加密后的字符应该是40个的
    post过来后的怎么就变成43个字符了?
    在后面的页面重新加密的也是40个字符的。。
    但是如果直接把指针指定一个那个加密后的字符串也是43个字符
    为什么?
      

  7.   

    var_dump()post过来的数据
    string(43) "356a192b7913b04c54574d18c28d46e6395428ab" 
    var_dump(sha1('1'))
    string(40) "356a192b7913b04c54574d18c28d46e6395428ab" 
    var_dump('356a192b7913b04c54574d18c28d46e6395428ab')
    string(43) "356a192b7913b04c54574d18c28d46e6395428ab"
      

  8.   

    你 echo pack('H*', $_POST['set']); 看一下结果
      

  9.   

    不好意思,我弄错了!
    这样:
    print_r(unpack('H*', $_POST['set']));
      

  10.   


    Array ( [1] => efbbbf33353661313932623739313362303463353435373464313863323864343665363339353432386162 ) 
      

  11.   

    Array ( [1] => efbbbf33353661313932623739313362303463353435373464313863323864343665363339353432386162 ) 这个 efbbbf 是 utf-8 的 BOM 头
    你去掉相关文件的 BOM 头就可以了