【发布时间】:2013-01-10 07:50:35
【问题描述】:
我有以下代码作为变量,并试图抓住正文标签之间的所有内容(同时保留 p 标签等)。这样做的最佳方法是什么?
- 预赛
-
strpos / substr
<head> <title></title> </head> <body> <p>Services Calls2</p> </body>
【问题讨论】:
标签: php
我有以下代码作为变量,并试图抓住正文标签之间的所有内容(同时保留 p 标签等)。这样做的最佳方法是什么?
strpos / substr
<head>
<title></title>
</head>
<body>
<p>Services Calls2</p>
</body>
【问题讨论】:
标签: php
两者都不是。您可以使用 XML 解析器,例如 DomDocument:
$dom = new DOMDocument();
$dom->loadHTML($var);
$body = $dom->getElementsByTagName('body')->item(0);
$content = '';
foreach($body->childNodes as $child)
$content .= $dom->saveXML($child);
【讨论】:
$var = str_replace("\r\n", "\n", $var);
试试这个,$html 有文字:
$s = strpos($html, '<body>') + strlen('<body>');
$f = '</body>';
echo trim(substr($html, $s, strpos($html, $f) - $s));
【讨论】:
strrpos('</body>')来获取结束标签位置会更可靠
我建议你使用 preg_match 因为<p>Services Calls2</p> 之间的内容可以一直改变,然后 subtr 或 strpos 将需要相当有争议的代码。
例子:
$a = '<h2><p>Services Calls2</p></h2>';
preg_match("/<p>(?:\w|\s|\d)+<\/p>/", $a, $ar);
var_dump($ar);
正则表达式将只允许字母、空格和数字。
【讨论】: