【问题标题】:External Entities in DTD with SYSTEM are not resolved in PHP带有 SYSTEM 的 DTD 中的外部实体在 PHP 中无法解析
【发布时间】:2014-02-22 02:16:55
【问题描述】:

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

【问题讨论】:

    标签: php xml external dtd entities


    【解决方案1】:

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

    【讨论】:

    • 可以确认这适用于我的设置。我遇到了与OP相同的问题。感谢您的想法!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-20
    • 2011-06-03
    • 1970-01-01
    相关资源
    最近更新 更多