我需要一种方法来只获取具有特定ID的元素并使用PHP显示它。我是一个PHP菜鸟,所以到目前为止这一直非常困难。所有其他类似的问题都有点过于复杂,所以我想知道是否有人可以向我解释。
为了更具体地说明我想要的东西,我正在拼写搜索一个Minecraft服务器。我们的网站是http://pvpzone.org/,wiki位于http://pvpzone.wikispaces.com/。每个法术在维基上都有一个页面,就像“Vanish”中的一个是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已经在Entity中定义,第212行/ home / content / d / e / x第24行/dext0459/html/russellsayshi/phpspellsearch.php NULL),我真的很感谢你的帮助。
答案 0 :(得分: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>';
}
?>