- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试使用 user contributed notes 中的代码在 php.net 上的 get_meta_tags功能。从表面上看,如果元标记的格式为 <meta content="foo" name="bar" />
那么代码将错过它。目前,只有格式为 <meta name="bar" content="foo"/>
的标签将工作。我对正则表达式不是很好,但没有成功修复它。这是一个 url 的例子这似乎通过了正则表达式。提前道歉,我的问题不一定是关于 get_meta_tags
功能,但这似乎与人们一直在使用该功能时遇到的其他一些问题不太相关。
问题似乎出在附近:
preg_match_all('/<[\s]*meta[\s]*(name|property)="?' . '([^>"]*)"?[\s]*' . 'content="?([^>"]*)"?[\s]*[\/]?[\s]*>/si', $contents, $match);
这可能需要是这样的:
preg_match_all('/<[\s]*meta[\s]*(name|property|content)="?' . '([^>"]*)"?[\s]*' . '(content|name)="?([^>"]*)"?[\s]*[\/]?[\s]*>/si', $contents, $match);
不过,我对正则表达式的使用非常糟糕。有什么想法吗?
最佳答案
一个想法是在 lookahead 中捕获元名称/属性独立于序列:
function extract_meta_tags($source)
{
$pattern = '
~<\s*meta\s
# using lookahead to capture type to $1
(?=[^>]*?
\b(?:name|property|itemprop|http-equiv)\s*=\s*
(?|"\s*([^"]*?)\s*"|\'\s*([^\']*?)\s*\'|
([^"\'>]*?)(?=\s*/?\s*>|\s\w+\s*=))
)
# capture content to $2
[^>]*?\bcontent\s*=\s*
(?|"\s*([^"]*?)\s*"|\'\s*([^\']*?)\s*\'|
([^"\'>]*?)(?=\s*/?\s*>|\s\w+\s*=))
[^>]*>
~ix';
if(preg_match_all($pattern, $source, $out))
return array_combine(array_map('strtolower', $out[1]), $out[2]);
return array();
}
参见 test at regex101 .使用 branch reset用于提取不同引用样式的值的功能。
print_r(extract_meta_tags($str));
尝试使用一些不同的数据 at eval.in
在 html 上使用它 <head>
部分。获取页面源并提取头部:
1.) 使用 cURL 获取源代码, file_get_contents或 fsockopen .
2.) 提取 <head>
通过使用 dom或正则表达式 like this: (?is)<head\b[^>]*>(.*?)</head>
3.) 从 <head>
中提取元标签通过使用提供的正则表达式或 try with a parser .
关于php - 修改后的 PHP get_meta_tags 不适用于某些 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31838347/
我在脚本中使用 get_meta_tags() 并在某些 URL 上失败(例如)... 警告:get_meta_tags(http://www.kodak.com/) [function.get-me
我想获取元标记(特别是 og:title、og:description 和 og:image) 我使用以下代码: $tags = get_meta_tags('https://www.shoutmel
我想获取元标记(特别是 og:title、og:description 和 og:image) 我使用以下代码: $tags = get_meta_tags('https://www.shoutmel
我正在尝试使用 get_meta_tags 函数来获取 url 的元信息。它无法给我来自相同来源或域的 url 的元信息。 就像我在 Controller 上做的一样http://example.co
定义和用法: get_meta_tags — 从一个文件中提取所有的 meta 标签 content 属性,返回一个数组 语法: 复制代码 代码如下: array
我使用 Laravel 5.2 进行网络抓取元标记,但我遇到了 get_meta_tags() 问题。 循环 get_meta_tags() 似乎存在超时和/或 cURL 问题。 以此为例 $urls
我正在尝试使用 get_meta_tags() 函数使用 PHP 获取 HTML 元标记。我对表、字符集/排序规则、MySQL 和其他所有内容的连接字符集使用 UTF8。 但不幸的是,MySQL 在插
因此 php 的 get_meta_tags 会获取具有名称字段的元标记,但有时有些元标记没有字段,但使用 property=""作为标识符,而此函数不会获取它.... 是否有更好的方法来获取元标记,
我想从 url 中提取元标记,尤其是标题和描述,但我不知道该怎么做。我试过 http://nodejs.org/docs/v0.4.2/api/http.html#http.request但我收到类似
PHP get_meta_tags. 是否有等效的 ruby/RoR 方法? 我正在寻找读取给定 url 的元标记信息 最佳答案 您可以尝试使用 Hpricot并做类似的事情: doc = Hpr
在 PHP 中,我使用 get_meta_tags() 和 get_headers(),但是,当出现 404 时,这两个函数会抛出警告。我有什么办法可以捕获它吗?谢谢! 最佳答案 get_header
我一直在使用 get_meta_tags() 和 get_headers() PHP 函数,并且需要设置超时值以防网站运行缓慢或无响应。有谁知道该怎么做? 最佳答案 您应该能够使用 default_s
我正在尝试使用 user contributed notes 中的代码在 php.net 上的 get_meta_tags功能。从表面上看,如果元标记的格式为 那么代码将错过它。目前,只有格式为 的
我是一名优秀的程序员,十分优秀!