使用preg_match或preg_replace在div中显示图像

时间:2016-02-04 10:11:32

标签: php image curl preg-replace preg-match-all

我的代码在这里;

$curl = curl_init($link);
    $userAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.A.B.C Safari/525.13";

curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT ,0);
    curl_setopt($curl, CURLOPT_USERAGENT, $userAgent);
    curl_setopt($curl, CURLOPT_TIMEOUT, 400);
    ini_set('max_execution_time', 300);

$page = curl_exec($curl);

if(curl_errno($curl)) // check for execution errors
{
    echo 'Scraper error: ' . curl_error($curl);
    exit;
}

$html= curl_close($curl);   

$dom = new DOMDocument();
@$dom->loadHTML($html);

$regex = '/<div id="urunid">(.*?)<\/div>/s';

if ( preg_match_all($regex, $page, $regs1, PREG_PATTERN_ORDER) ) {
    echo  preg_replace('<img(.*)src="([^ "]*)"([^>]*)>', '<a href="$2"><img$1src="$2"$3></a>', "", $regs1[0])."<br />";
} else {
    print "Not found";  
}

为什么我无法在div中显示图像?我希望只显示div中带链接的图像,但它没有显示任何我不知道为什么..我的代码是错的吗?或者我必须添加另一个功能?

1 个答案:

答案 0 :(得分:0)

试试这个:

$curl = curl_init($link);
    $userAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.A.B.C Safari/525.13";

curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT ,0);
    curl_setopt($curl, CURLOPT_USERAGENT, $userAgent);
    curl_setopt($curl, CURLOPT_TIMEOUT, 400);
    ini_set('max_execution_time', 300);

$page = curl_exec($curl);

if(curl_errno($curl)) // check for execution errors
{
    echo 'Scraper error: ' . curl_error($curl);
    exit;
}

$html= curl_close($curl);   

$dom = new DOMDocument();
@$dom->loadHTML($html);

$regex = '/<div id="urunid">(.*?)<\/div>/s';

if ( preg_match_all($regex, $page, $regs1, PREG_PATTERN_ORDER) ) {
    echo  preg_replace('<img(.*)src="([^ "]*)"([^>]*)>', '<a href="$2"><img$1src="$2"$3></a>', $regs1[0])."<br />";
} else {
    print "Not found";  
}

问题是函数preg_replace()的工作原理如下:

mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )

第一个论点:你给'<img(.*)src="([^ "]*)"([^>]*)>'作为模式,这是好的 第二个参数是替换'<a href="$2"><img$1src="$2"$3></a>' OK
第三个论点应该是替换发生的主题。你给的是一个空字符串。

我建议您阅读有关preg_replace()的PHP文档,特别是关于“$ subject”的部分以及返回值的工作原理。

希望有所帮助