У меня есть строка, которая содержит следующее:
<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']));
Вы можете использовать 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]);
}
вы можете использовать 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);