2017-01-21 86 views
0

我有一塊html存儲在wordpress的自定義字段中。我需要使用php函數僅返回來自該自定義字段的鏈接。它必須是一個功能。這是我的嘗試,但我的結果只是說陣列:PHP函數返回html中的鏈接

<?php 
function linkExtractor($html){ 
$linkArray = array(); 
if(preg_match_all('/<img\s+.*?src=[\"\']?([^\"\' >]*)[\"\']? [^>]*>/i',$html,$matches,PREG_SET_ORDER)){ 
    foreach($matches as $match){ 
    array_push($linkArray,array($match[1],$match[2])); 
} 
} 
return $linkArray; 
    } 
    ?> 

在wordpress中,我用它作爲短代碼,它看起來像。這是100%正確的格式,因爲我一直都在使用它。

[linkExtractor(custom_field_name)] 
+0

我厭倦了這兩個功能linkExtractor()和功能linkExtractor($ HTML) –

+0

即使語法是有點不同的,也許我的簡碼庫會派上用場:https://開頭github上。 com/thunderer/Shortcode。 –

回答

0

你的結果說數組?看起來你正在試圖回顯一個你剛剛得到數據類型的數組。

但是,無論調用該函數將不得不遍歷該數組。無論如何,清理你的文章,以便我能更好地理解它。謝謝

和$匹配在哪裏?另外你的函數沒有HTML參數,也不一定全部有效。

順便說一句,我不熟悉,「WordPress的」

0

,而不是使用正則表達式,嘗試適當的HTML解析器?例如,DOM文檔:

function linkExtractor(string $html): array { 
    $ret = array(); 
    $domd = @\DOMDocument::loadHTML ($html); 
    foreach ($domd->getElementsByTagName ("*") as $ele) { 
     if (! \method_exists ($ele, 'getAttribute')) { 
      // not all elements has getAttribute 
      continue; 
     } 
     $link = $ele->getAttribute ("src"); 
     if (! is_string ($link) || strlen ($link) < 1) { 
      continue; 
     } 
     $ret [] = $link; 
    } 
    return $ret; 
} 
+0

我在嘗試測試時遇到以下錯誤:解析錯誤:語法錯誤,意外的':',期望第2行代碼中的'{' –

+0

代碼使用PHP7語法編寫。你會遇到這個錯誤,因爲你試圖在PHP5中運行它。這裏是一個PHP5友好的版本:http://paste.debian.net/909859/ – hanshenrik

+0

它只是返回單詞數組。我會更新我的源html。 –