1

我需要一种方法来仅获取具有特定 ID 的元素并使用 PHP 显示它。我是一个 PHP 菜鸟,所以到目前为止这一直非常困难。与此类似的所有其他问题都太复杂了,所以我想知道是否有人可以向我解释。

为了更具体地说明我想要什么,我正在为我的世界服务器进行法术搜索。我们的网站是http://pvpzone.org/,wikihttp://pvpzone.wikispaces.com/。每个咒语在 wiki 上都有一个页面,例如“消失”的页面是 pvpzone.wikispaces.com/Vanish。咒语搜索的想法是寻找咒语的一种更简单的方法,您输入咒语名称并获得结果。div 'wiki wikiPage' 中包含拼写数据。我想得到那个 div 并显示它。遗憾的是,我无法使用法术连接到任何形式的数据库,它由 Wikispaces 托管,他们不允许这样做。

我希望这已经清楚了,如果您愿意,请向我询问更多详细信息。这是我到目前为止所拥有的:

<?php
if(isset($_POST['submit']))
{
    $spell=$_POST['spell'];
    $pvpwiki="http://pvpzone.wikispaces.com/";
    $site=$pvpwiki . $spell;
    $submit=true;
}
?>
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8">
        <title>Spell search</title>
    </head>
    <body>
        <form name="spellsearch" id="spellsearchform" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
            <input type="text" name="spell" value="<?php if(!isset($_POST['submit'])){echo("Vanish");}?>"></input>
            <input type="submit" value="Search" name="submit"></input>
        </form>
            <?php
                $doc = new DomDocument;
                $doc->validateOnParse = true;
                $doc->loadHtml(file_get_contents($site));
                var_dump($doc->getElementById('wiki wikiPage'));

                if($doc == false && $submit)
                {
                    echo("<br />" . "That is not a spell!");
                }
            ?>
    </body>
</html>

我现在的问题是我收到解析错误(警告:DOMDocument::loadHTML() [domdocument.loadhtml]: ID target_editor already defined in Entity, line: 212 in /home/content/d/e/x/dext0459/ html/russellsayshi/phpspellsearch.php 第 24 行 NULL),非常感谢您的帮助。

4

1 回答 1

1

您看到的错误消息只是一个警告:

警告:DOMDocument::loadHTML() [domdocument.loadhtml]:ID target_editor 已在实体中定义,行:/home/content/d/e/x/dext0459/html/russellsayshi/phpspellsearch.php 中的第 212 行第 24 行 NULL

你可以忽略这些,它们不会阻止你。如果您在您的网站上看到它们,则说明您没有正确配置它,您应该记录错误,而不是显示它们。

无论如何,对于该库,您也可以通过这种方式禁用它们:

libxml_use_internal_errors(true);

在加载 HTML 之前调用它。那个HTML顺便说一句。当我尝试使用该网站时没有导致错误。

下一个错误是您正在寻找一个类而不是一个 ID。改为查找 ID:

$div = $doc->getElementById('content_view');

整个代码示例:

function get_wiki_page_div($page)
{
    $url = sprintf('http://pvpzone.wikispaces.com/%s', urlencode($page));

    $doc = new DOMDocument();
    $doc->validateOnParse = true;
    libxml_use_internal_errors(true);

    $doc->loadHTMLFile($url);

    $div = $doc->getElementById('content_view');

    if (!$div) {
        return false;
    }

    return $doc->saveXML($div);
}

用法:

<?php
$submit = isset($_POST['submit']);
if ($submit)
{
    $spell  = $_POST['spell'];
    $result = get_wiki_page_div($spell);
}
?>

...


<?php
if ($submit)
{
    echo $result ? $result : '<div>This is not a Spell!</div>';
}
?>
于 2012-09-22T16:35:37.260 回答