我无法解决以下问题。我想在基于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的请求。