繁体   English   中英

PHP XMLReader 400错误请求

[英]PHP XMLReader 400 Bad Request

我试图开始使用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>";时,错误都会消失echo reader->value ."<br>"; Apache错误日志未显示任何内容。 同样,尽管出现了400错误,仍会按预期的方式使用元素和文本值来创建和呈现页面(即,代码似乎正常工作,它也给出了HTTP错误)。

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

在此先感谢您的帮助!

仅供参考,以防万一其他人遇到这个问题,我发现我需要使用htmlspecialchars()来转义该值。 我变了:

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

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

猜猜浏览器试图解释的XML中肯定有一些html导致了400错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM