从包含html和javascript的字符串中提取链接

时间:2017-09-11 23:09:29

标签: php html

我有一个包含以下内容的字符串:

<img data-bind="defaultSrc: {srcDesktop: 'http://desktoplink', srcMobile: 'http://mobilelink', fallback: 'http://baseurl'}" >

我正在尝试提取字符串中包含的srcDesktop。我希望我的最终结果能够获得链接http://desktoplink。除了str_replace之外,实现其他目标的最佳方法是什么?我有一个包含这些字符串的数据集,所以我正在寻找一个公式来在PHP中提取它。

以下是我一直在做的事情,但必须采用更有效的方式:

$string = '<img data-bind="defaultSrc: {srcDesktop: \'http://desktoplink\', srcMobile: \'http://mobilelink\', fallback: \'http://baseurl\'}" >';
$test = explode(" ",$string);
echo "<br>".str_replace(",","",str_replace("'","",$test['3']));

2 个答案:

答案 0 :(得分:1)

你可以使用DOMDocument和json_decode来获取这个值,如果你可以将代码更改为下面的代码(添加一些'-signs):

$string = "<img data-bind=\"'defaultSrc': {'srcDesktop': 'http://desktoplink', 'srcMobile': 'http://mobilelink', 'fallback': 'http://baseurl'}\" >";
$doc = new DOMDocument();
$doc->loadHTML($string);
$data = str_replace('\'','"',$doc->getElementsByTagName('img')[0]->getAttribute('data-bind'));
$json = json_decode('{'.$data.'}');
var_dump($json->defaultSrc->srcDesktop);

答案 1 :(得分:1)

您可以使用preg_match

$string = '<img data-bind="defaultSrc: {srcDesktop: \'http://desktoplink\', srcMobile: \'http://mobilelink\', fallback: \'http://baseurl\'}" >';

preg_match('/.*\bsrcDesktop:\s*(?:\'|\")(.*?)(?:\'|\").*/i', $string, $matches);

if (isset($matches[1])) {
    echo trim($matches[1]);
}