我正在获取某个网站的file_get_content并返回此
<meta property="og:video:secure_url" content="//abc-def-
ghi.net/reg02/2016/05/31/05/92f24c57-2cb3-42b0-84cb-edad24d7b68f.mp4?
secure=1"><meta property="og:video:type" content="video/mp4"><meta
property="og:video:width" content="540"><meta property="og:video:height"
content="960"><meta property="fb:app_id" content="682659535154406">
正如您所看到的,内容被多次写入。我想要做的是,如果我搜索 .mp4 ,如果在某些内容中找到,那么它将复制该双引号内的整个数据 例如,在上面的代码中,它将提取并给我
//mpak-suse1.akamaized.net/reg02/2016/05/31/05/92f24c57-2cb3-42b0-84cb-edad24d7b68f.mp4?secure=1
我对如何做到这一点非常困惑所以没有编码任何东西。 我发现另一种解决方案是在函数
之间使用get stringfunction get_string_between($string, $start, $end){
$string = " ".$string;
$ini = strpos($string,$start);
if ($ini == 0) return "";
$ini += strlen($start);
$len = strpos($string,$end,$ini) - $ini;
return substr($string,$ini,$len);
}
$link = get_string_between($output, '<meta property="og:video:secure_url" content="', '">');
但它看起来并不可靠。我要求的东西可以帮助许多其他项目的人。如果有人可以请指教这个话题
答案 0 :(得分:0)
大多数StackOverflow志愿者建议使用像DomDocument或类似的dom解析器来有效/可靠地解析HTML数据。
代码:(Demo)
$userInput = 2;
$data = Customer::with('cars')
->withCount('cars')
->has('cars', '<', $userInput)
->orderBy('cars_count', 'desc')
->get();
输出:
$html = <<<HTML
<meta property="og:video:secure_url" content="//abc-def-
ghi.net/reg02/2016/05/31/05/92f24c57-2cb3-42b0-84cb-edad24d7b68f.mp4?
secure=1"><meta property="og:video:type" content="video/mp4"><meta
property="og:video:width" content="540"><meta property="og:video:height"
content="960"><meta property="fb:app_id" content="682659535154406"><meta property="test" nocontent="bad">
HTML;
$dom=new DOMDocument;
$dom->loadHTML($html);
foreach ($dom->getElementsByTagName("meta") as $meta) {
if ($meta->hasAttribute('content') && strpos($content = $meta->getAttribute('content'), '.mp4')) {
$result[] = $content;
}
}
var_export($result);
*对于记录,是的,我知道使用array (
0 => '//abc-def-
ghi.net/reg02/2016/05/31/05/92f24c57-2cb3-42b0-84cb-edad24d7b68f.mp4?
secure=1',
)
对false
进行测试,因为偏移strpos()
和0
松散地评估为false
,但逻辑上,如果false
值以content
开头,则它不会成为可用/合格值。