在PHP中找到一个流氓<!---->

时间:2009-12-04 06:00:36

标签: php html

这:<!---->

这......这......事。就在那里。

邪恶的7个字符,迫使IE在怪异模式下将所有页面都用它呈现在顶部:

<!----><!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">

如果它不是邪恶我不知道是什么,因为它肯定不在我的模板文件中,因为它的前几行是:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <?php $this->outputHead(); ?>
    </head>

我当然没有在实际输出代码中看到任何问题:

function build()
{
    if ($this->disabled)
    {
        return $this->content;
    }
    else
    {
        global $footer;
        ob_start();
        $location = $this->location;
        include($this->location['theme_nr'].'/overall.php');
        return ob_get_clean();
    }
}

function outputAll()
{
    // stop capturing everything
    $this->content = ob_get_clean();

    // build the page
    echo $this->build();
}

我真的不明白。这个的东西如何进入我的代码?

我可以想象最后>位变成笑容,而对我来说。

它困扰着我的梦想,它杀死了我的猫,我不知道它接下来要做什么,但它会杀死某些东西

帮助我,你们是网络开发之神!

编辑:只是一个注释,它确实出现在所有浏览器中,但它似乎驱使IE弹道而不是其他浏览器。

5 个答案:

答案 0 :(得分:3)

我找到了罪魁祸首。

不知何故,我在函数中隐藏MySQL错误只会导致我的一个分支出现问题,即使函数及其调用位置在两个分支之间没有变化。

对于那些感兴趣的人,有问题的代码:

function isexistinguser($uname,$pwd)
{
    global $location;

    $uname = mysql_real_escape_string($uname);

    $result = mysql_query("SELECT * FROM users WHERE user_username = '$uname'");

    $hit = 0;
    $rowcounted = false;
    $salt = '';

    echo '<!--'; // cheap fix for mysql error - FIND A BETTER WAY!

    while($row = mysql_fetch_array($result))
    {       
        // Do stuff to figure out what to return
    }

    echo '-->'; // cheap fix for mysql error - FIND A BETTER WAY!

    return array($hit,$salt);
}

答案 1 :(得分:1)

我查看了你发布的git repo,但它并未包含在内。您可以尝试从github上的副本到当前副本的差异,因为更改是您所做的更改。


如果您使用的是IDE,请执行全局文件搜索字符串。这些“错误”可能很麻烦。

答案 2 :(得分:0)

如果你可以通过cygwin或直接在Linux中使用它,那么看起来像grep会很方便。仅查找具有该HTML注释的文件的快速示例

grep -R "<\!---->" ./*

这应该缩小搜索范围。

答案 3 :(得分:0)

关于您的错误处理。处理它的第一种方法是使用set_error_handler定义和使用自己的处理程序而不是php默认处理程序。

作为一个简单的修复,请修改以下行:$result = mysql_query("SELECT * FROM users WHERE user_username = '$uname'"); 有类似的东西:

$result = mysql_query("SELECT * FROM users WHERE user_username = '$uname'");
if(!$result || !is_resource($result){
  return array(0, '');
}

为了结束这一点,我建议您检查PDO以使用数据库。

答案 4 :(得分:0)

我会寻找'邪恶'字符串:

grep -R '\-\->' /your/folder