DTD with SYSTEM中的外部实体未在PHP中解析

时间:2013-12-15 21:50:50

标签: php xml external dtd entities

我无法弄清楚以下问题。我想基于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文件时,实体&amp; 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文件时,实体&amp; 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()',它没有改变任何东西!

1 个答案:

答案 0 :(得分:1)

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