[英]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 "<" . $reader->name . "> <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 "<" . $reader->name . "> <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.