带有SYSTEM的DTD中的外部实体在PHP中无法解析


External Entities in DTD with SYSTEM are not resolved in PHP

我无法解决以下问题。我想在基于SYSTEM的DTD中解析一个外部实体:我在最新的Ubuntu 12.10上运行…没有自定义更改!

我有以下PHP测试代码:

<h1>simpleXml Demo</h1>
<form name="input" action="" method="POST">
  <textarea  name="xmlInput"></textarea><br />
  <input type="submit" value="Submit">
</form> 
<?php
if(isset($_POST['xmlInput']) and strlen($_POST['xmlInput'])>0){
    $doc = simplexml_load_string($_POST['xmlInput']);
    echo "<pre>";
    print_r($doc);
    echo "</pre>";       
?>

示例1:当运行此XML文件时,实体&foo;已解决。

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE results [
  <!ENTITY test "some text,">
]>
<results>
  <result>This result is &test;</result>
</results>

示例2:当运行此XML文件时,实体&foo;只是被什么都没有取代——一点错误都没有!

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE result [
  <!ENTITY test SYSTEM "http://textfiles.com/food/btaco.txt">
]>
<results>
  <result>This result is &test;</result>
</results>

我已经玩过"libxml_disable_entity_loader()"了,它没有改变任何东西!

在解析XML数据时尝试使用LIBXML_NOENT选项。这是违反直觉的,但这将启用外部实体,并且会发生对URL的请求。