PHP XMLReader 400错误请求

时间:2016-06-12 21:15:43

标签: php xml xmlreader http-status-code-400

我试图开始使用XMLReader来处理大型XML文件,但是当我尝试运行以下代码时,我收到一个奇怪的HTTP 400错误请求:

<?php
$reader = new XMLReader ();
$reader->open ( "testfile.xml" );
while ( $reader->read () ) {
    switch ($reader->nodeType) {
        case (XMLREADER::ELEMENT) : 
            echo "&lt;" . $reader->name . "&gt; <br>";
            break;
        case (XMLREADER::TEXT) :
            if ($reader->hasValue) {
                echo $reader->value . "<br>";
            }
            break;
    }
}
$reader->close(); 
?>

我也尝试过这种方式并获得相同的400 Bad Request错误:

<?php
$reader = new XMLReader ();
$reader->open ( "testfile.xml" );
while ( $reader->read() ) {
    switch ($reader->nodeType) {
        case (XMLREADER::ELEMENT) : 
            echo "&lt;" . $reader->name . "&gt; <br>";
            $reader->read();
            if (($reader->nodeType == XMLREADER::TEXT) && $reader->hasValue) {
                echo $reader->value . "<br>";
            }
            break;
    }
}
$reader->close(); 
?>

在这两种情况下,当我评论echo reader->value ."<br>";时,错误就会消失。 Apache错误日志没有显示任何内容。此外,尽管有400错误,页面仍然按照预期的元素和文本值创建和呈现(即,代码似乎有效,它也只是给出了HTTP错误)。

值得注意的是,它似乎在一个小而简单的测试XML文件上没有错误,只有一个根和一个带有文本的子元素。它只适用于我实际上打算处理的更大更复杂的XML文件,我收到错误。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

如果其他人碰到这个问题,我发现我需要使用htmlspecialchars()来逃避这个价值。我改变了:

echo $reader->value . "<br>";

echo htmlspecialchars($reader->value, ENT_XML1, 'UTF-8') . "<br>";

猜测XML中必须存在一些浏览器试图解释的html导致400错误。