php 仅从外部 div 从 url 检索一个字符串
php only retrieving one string from external div from url
我正在尝试 link 我的页面到另一个网站,我可以在其中使用 div 标签以使我的网站保持最新。
经过一些研究,我得到了一些代码,它只回显了 1 个字符串,而页面上有多个 div 类,我想全部回显。我只是想知道这是否可能?
这是当前代码:
<?php
$url = 'http://www.domain.com';
$content = file_get_contents($url);
$activity = explode( '<div class="class">' , $content );
$activity_second = explode("</div>" , $activity );
echo $activity_second[0];
?>
我可以回显 $activity_second[0]
将显示第一行,而 $activity_second[1]
将显示第二行。
但是,我希望扩展它以允许将同一页面上的所有 div 类 放入一个数组中,然后可以将其回显到不同的部分table.
提前感谢您的帮助。
问题可能是第一个数组的第一个键进入第二个爆炸。在 $activity 之后尝试以下操作:
$result = array();
foreach ($activity as $div){
$handle = explode("</div>", $div);
$result -> append($handle);
}
foreach ($result as $key){
echo $key;
}
很抱歉原来的回复,我误解了你的问题。
正则表达式方式也可以。
如果您打算获取具有该 class 名称的 div 的所有内容,您可以使用正则表达式捕获那些 div 的标签之间的字符串:
preg_match_all('/<div class="class">([^<]+)<\/div>/', $content, $m);
print_r($m[1]);
现在 $m[1]
将是一个数组,其中包含那些 div 的所有内部 HTML 字符串。
规则是:when I act with HTML, I have to use a parser.
假设您有一个这样的 HTML 文档:
$html = '<html>
<head><title>Untitled</title></head>
<body>
<div class="class">
<b>My Content 1</b>
</div>
<div class="class">
<b>My Content 2</b>
</div>
<div class="class">
<b>My Content 3</b>
</div>
</body>
</html>';
根据加载的 HTML:
将其加载到 DOMDocument
object, init a DOMXPath
对象中
$dom = new DOMDocument();
libxml_use_internal_errors(1);
$dom->formatOutput = True;
$dom->loadHTML( $html );
$xpath = new DOMXPath( $dom );
并且使用此命令您可以访问所有 <div class="class">
:
foreach( $xpath->query( '//div[@class="class"]' ) as $node )
{
echo trim( $node->nodeValue ) . '<br>';
}
你的输出:
My Content 1
My Content 2
My Content 3
如果要将节点回显为 HTML,请替换 echo ...
与:
echo $dom->saveHTML( $node );
将输出:
<div class="class">
<b>My Content 1</b>
</div>
<div class="class">
<b>My Content 2</b>
</div>
<div class="class">
<b>My Content 3</b>
</div>
最后,如果你只想回显节点的内部HTML,你必须这样写:
foreach( $xpath->query( '//div[@class="class"]' ) as $node )
{
foreach ($node->childNodes as $child)
{
echo $dom->saveHTML( $child );
}
}
你的输出将是:
<b>My Content 1</b>
<b>My Content 2</b>
<b>My Content 3</b>
- 阅读更多关于 DOMDocument
- 阅读更多关于 DOMXPath
- 阅读why you can't parse [X]HTML with regex
让我看看我是否说清楚了,你有这样的东西:
<div id="another-class"><div class="class">some text 1</div></div>
<div class="class">some text 2</div>
<div class="class">some text 3</div>
<div class="class">some text 4</div>
<div class="class">some text 5</div>
<div class="class">some text 6</div>
并且您需要包含 div 元素的文本。如果这是正确的,替换:
$activity = explode( '<div class="class">' , $content );
$activity_second = explode("</div>" , $activity );
有了这个:
preg_match_all('#<div class="class">(.+?)</div>#', $content, $matches);
在此示例中,函数调用 $matches 后将具有以下内容:
Array
(
[0] => Array
(
[0] => <div class="class">some text 1</div>
[1] => <div class="class">some text 2</div>
[2] => <div class="class">some text 3</div>
[3] => <div class="class">some text 4</div>
[4] => <div class="class">some text 5</div>
[5] => <div class="class">some text 6</div>
)
[1] => Array
(
[0] => some text 1
[1] => some text 2
[2] => some text 3
[3] => some text 4
[4] => some text 5
[5] => some text 6
)
)
您需要的数据在 $matches[1] 中。
我正在尝试 link 我的页面到另一个网站,我可以在其中使用 div 标签以使我的网站保持最新。
经过一些研究,我得到了一些代码,它只回显了 1 个字符串,而页面上有多个 div 类,我想全部回显。我只是想知道这是否可能?
这是当前代码:
<?php
$url = 'http://www.domain.com';
$content = file_get_contents($url);
$activity = explode( '<div class="class">' , $content );
$activity_second = explode("</div>" , $activity );
echo $activity_second[0];
?>
我可以回显 $activity_second[0]
将显示第一行,而 $activity_second[1]
将显示第二行。
但是,我希望扩展它以允许将同一页面上的所有 div 类 放入一个数组中,然后可以将其回显到不同的部分table.
提前感谢您的帮助。
问题可能是第一个数组的第一个键进入第二个爆炸。在 $activity 之后尝试以下操作:
$result = array();
foreach ($activity as $div){
$handle = explode("</div>", $div);
$result -> append($handle);
}
foreach ($result as $key){
echo $key;
}
很抱歉原来的回复,我误解了你的问题。
正则表达式方式也可以。
如果您打算获取具有该 class 名称的 div 的所有内容,您可以使用正则表达式捕获那些 div 的标签之间的字符串:
preg_match_all('/<div class="class">([^<]+)<\/div>/', $content, $m);
print_r($m[1]);
现在 $m[1]
将是一个数组,其中包含那些 div 的所有内部 HTML 字符串。
规则是:when I act with HTML, I have to use a parser.
假设您有一个这样的 HTML 文档:
$html = '<html>
<head><title>Untitled</title></head>
<body>
<div class="class">
<b>My Content 1</b>
</div>
<div class="class">
<b>My Content 2</b>
</div>
<div class="class">
<b>My Content 3</b>
</div>
</body>
</html>';
根据加载的 HTML:
将其加载到DOMDocument
object, init a DOMXPath
对象中
$dom = new DOMDocument();
libxml_use_internal_errors(1);
$dom->formatOutput = True;
$dom->loadHTML( $html );
$xpath = new DOMXPath( $dom );
并且使用此命令您可以访问所有 <div class="class">
:
foreach( $xpath->query( '//div[@class="class"]' ) as $node )
{
echo trim( $node->nodeValue ) . '<br>';
}
你的输出:
My Content 1
My Content 2
My Content 3
如果要将节点回显为 HTML,请替换 echo ...
与:
echo $dom->saveHTML( $node );
将输出:
<div class="class">
<b>My Content 1</b>
</div>
<div class="class">
<b>My Content 2</b>
</div>
<div class="class">
<b>My Content 3</b>
</div>
最后,如果你只想回显节点的内部HTML,你必须这样写:
foreach( $xpath->query( '//div[@class="class"]' ) as $node )
{
foreach ($node->childNodes as $child)
{
echo $dom->saveHTML( $child );
}
}
你的输出将是:
<b>My Content 1</b>
<b>My Content 2</b>
<b>My Content 3</b>
- 阅读更多关于 DOMDocument
- 阅读更多关于 DOMXPath
- 阅读why you can't parse [X]HTML with regex
让我看看我是否说清楚了,你有这样的东西:
<div id="another-class"><div class="class">some text 1</div></div>
<div class="class">some text 2</div>
<div class="class">some text 3</div>
<div class="class">some text 4</div>
<div class="class">some text 5</div>
<div class="class">some text 6</div>
并且您需要包含 div 元素的文本。如果这是正确的,替换:
$activity = explode( '<div class="class">' , $content );
$activity_second = explode("</div>" , $activity );
有了这个:
preg_match_all('#<div class="class">(.+?)</div>#', $content, $matches);
在此示例中,函数调用 $matches 后将具有以下内容:
Array
(
[0] => Array
(
[0] => <div class="class">some text 1</div>
[1] => <div class="class">some text 2</div>
[2] => <div class="class">some text 3</div>
[3] => <div class="class">some text 4</div>
[4] => <div class="class">some text 5</div>
[5] => <div class="class">some text 6</div>
)
[1] => Array
(
[0] => some text 1
[1] => some text 2
[2] => some text 3
[3] => some text 4
[4] => some text 5
[5] => some text 6
)
)
您需要的数据在 $matches[1] 中。