2017-01-21 59 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。 –