我正在尝试从网站获取元标记并回显结果,到目前为止它运行良好,但我发现了一个外部问题......
我正在使用此代码:
static private function _parse($HTML) {
$old_libxml_error = libxml_use_internal_errors(true);
$doc = new DOMDocument();
$doc->loadHTML($HTML);
libxml_use_internal_errors($old_libxml_error);
$tags = $doc->getElementsByTagName('meta');
if (!$tags || $tags->length === 0) {
return false;
}
$page = new self();
foreach ($tags AS $tag) {
if ($tag->hasAttribute('property') &&
strpos($tag->getAttribute('property'), 'og:') === 0) {
$key = strtr(substr($tag->getAttribute('property'), 3), '-', '_');
$page->_values[$key] = $tag->getAttribute('content');
}
}
if (empty($page->_values)) { return false; }
return $page;
}
当我尝试提取的网址使用attibute&#39;属性&#39; (例如:<meta property="title">
)一切正常,因为代码可以做...但有些网址使用属性&#39; name&#39; (例如:<meta name="title">
)代替&#39;属性&#39; ...
所以,我需要找到一个解决方案来提取属性&#39;如果它为空,请返回&#39; name&#39; ...
中的值我尝试了一些东西,但到目前为止还没有成功。任何人都有想法吗?
答案 0 :(得分:0)
也许这个
foreach ($tags AS $tag) {
if ($tag->hasAttribute('property') &&
strpos($tag->getAttribute('property'), 'og:') === 0) {
$key = strtr(substr($tag->getAttribute('property'), 3), '-', '_');
$page->_values[$key] = $tag->getAttribute('content');
} else if ($tag->hasAttribute('name') &&
strpos($tag->getAttribute('name'), 'og:') === 0) {
$key = strtr(substr($tag->getAttribute('name'), 3), '-', '_');
$page->_values[$key] = $tag->getAttribute('content');
}
}
正如OZ_注意到的,您可以使用str_ireplace将所有元名重命名为元属性。