【问题标题】:How can I use "PHP Simple HTML DOM Parser" to get the contents of an <h1></h1> tag?如何使用“PHP Simple HTML DOM Parser”获取 <h1></h1> 标签的内容?
【发布时间】:2010-05-14 14:01:09
【问题描述】:

我是 PHP 新手 =) 现在我正在为我的网站模板使用 PHP 包含。我有我的标题,包含我所有的&lt;head&gt;&lt;/head&gt; 信息。我想要做的是编写一个代码,该代码将从页面中获取&lt;h1&gt;&lt;/h1&gt; 标记的内容,并将其回显到我的 header.php 包含中的&lt;title&gt;&lt;/title&gt; 标记中。

我从这里获得了 PHP 简单 HTML DOM 解析器:[http://simplehtmldom.sourceforge.net/][1],我找到了一个代码(我忘记了我在谷歌上搜索的位置),如下所示:

<?php
$url = (!empty($_SERVER['HTTPS'])) ? "https://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'] : "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
$html = file_get_html('http://www.myurl.com/');
foreach($html->find('#content h1') as $element){
    echo $element->plaintext;}
?>

我认为应该回显 h1 标签内容?就像我说的,我是 PHP 新手,我只知道基础知识,而且我不知道真正了解任何 OOP(还),所以如果我问了一个愚蠢的问题,我很抱歉。

它看起来是获取当前页面,然后将h1标签的内容放入变量$element,然后回显它。但是当我将它放入我的页面时没有任何反应。谁能帮我解决我做错的事情?谢谢你的阅读!! =)

编辑:这是我的 HTML

来自 header.php 文件:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<?php
/* current page url */
function curPageURL() {
 $pageURL = 'http';
 if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
 $pageURL .= "://";
 if ($_SERVER["SERVER_PORT"] != "80") {
  $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
 } else {
  $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
 }
 return $pageURL;
}
?>

<?php include '/home/dreami14/public_html/simplehtmldom/simplehtmldom/simple_html_dom.php' ?>

<title>
<?php
$url = curPageURL();
$html = file_get_html($url);
foreach($html->find('#main h1') as $element){
    echo $element->plaintext;}
?></title>

<link rel="stylesheet" type="text/css" href="/stylesheet.css" />
</head>
<body>

来自 test.php:

<?php include '/home/dreami14/public_html/design/includes/head.php' ?>

<div id="main">
<h1>This should be the title</h1>
<p>Blah blah</p>
</div>

</body>
</html>

我没有收到任何错误,但我的 &lt;title&gt;&lt;/title&gt; 是空的。

编辑添加:另外,我在文档本身中回显了 $url,所以我知道该部分正在工作

【问题讨论】:

  • 在我看来就像一个无限循环。为了显示整个页面,您在脚本中调用相同的 URL,然后尝试构建整个页面,该页面再次调用 URL....明白我的意思了吗?
  • 感谢 Felix- 所以当我这样做时:[[[ $html = file_get_html($url); ]]],这是调用整个页面的部分吗?您知道还有其他方法可以做到这一点吗?
  • 简单的 HTML DOM 解析器 - 好脚本。你的“模式”——坏主意。

标签: php html-parsing


【解决方案1】:

您并不是说您的 HTML 是如何构成的,但如果您想找到 ID 为 contenth1,您需要使用

foreach($html->find('h1#content') as $element){

按照您现在的操作方式,它说“找到任何h1 元素 另一个ID 为content 的元素”。

【讨论】:

  • 感谢您的回答,这就是我想要的。我刚才尝试了几种不同的方法-给h1标签一个id为“title”并将php代码更改为h1#title,但它仍然没有回应任何东西:(
【解决方案2】:

我会稍微重构一下您的代码。基本上,您试图在填充之前获取 h1 中的内容。在您的 test.php 中,我将定义一个包含元数据的数组,然后包含标题。
像这样:

test.php

<?php 
$meta = array();
$meta['title'] = "This should be the title";

include '/home/dreami14/public_html/design/includes/head.php' 

?>

<div id="main">
<h1><?php echo $meta['title'] ?></h1>
<p>Blah blah</p>
</div>

</body>
</html>

head.php:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
   <title>
 <?php echo (isset($meta) && isset($meta['title'])) ? $meta['title'] : "Default title"; ?>
   </title>
   <link rel="stylesheet" type="text/css" href="/stylesheet.css" />
</head>
<body>

但是如果你开始做更复杂的事情,你应该看看Model-View-Controller 设计模式,例如Zend framework,它实现了它。

【讨论】:

    【解决方案3】:

    我认为是这样,只打印子内容:

    html = file_get_html($url);
    foreach($ret->children as $child) {  
       echo $child;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-01
      • 1970-01-01
      • 2018-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-24
      • 1970-01-01
      相关资源
      最近更新 更多