2016-06-12 12 views
0

Я пытаюсь начать использовать XMLReader для обработки больших XML-файлов, но я получаю странный HTTP 400 Bad Request, когда я пытаюсь запустить следующий код:PHP XMLReader 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>"; 
      break; 
     case (XMLREADER::TEXT) : 
      if ($reader->hasValue) { 
       echo $reader->value . "<br>"; 
      } 
      break; 
    } 
} 
$reader->close(); 
?> 

I также попытался это так и получить тот же 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-файле, который я на самом деле намерен обработать, чтобы получить ошибку.

Заранее благодарим за любую помощь!

ответ

0

FYI в случае, если кто-то еще сталкивается с этим, я узнал, что мне нужно использовать htmlspecialchars(), чтобы избежать значения. Я изменил:

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

в

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

Guess должен быть некоторый HTML в XML, что браузер пытается интерпретировать вызывает ошибку 400.