[英]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.