2013-12-15 27 views
1

我找不出以下問題。我想在基於SYSTEM的DTD中解析外部實體: 我在最新的Ubuntu 12.10上運行..沒有自定義更改!帶有SYSTEM的DTD中的外部實體在PHP中未得到解決

我有以下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()',它沒有改變任何東西!

回答

1

嘗試在解析XML數據時使用LIBXML_NOENT選項。這是違反直覺的,但是這會使外部實體和對URL的請求發生。

+0

可以確認這與我的設置一起工作。我遇到了和OP一樣的問題。感謝您的想法! –