2010-09-07 49 views
7

嗨我正在使用下面的代码,但我得到第二行“意外的T_FUNCTION”语法错误。有什么建议么?

preg_replace_callback("/\\[LINK\=(.*?)\\\](.*?)\\[\/LINK\\]/is", 
function (array $matches) { 
    if (filter_var($matches[1], FILTER_VALIDATE_URL)) 
     return '<a href="'. 
      htmlspecialchars($matches[1], ENT_QUOTES). 
      '" target="_blank">'. 
      htmlspecialchars($matches[2])."</a>"; 
    else 
     return "INVALID MARKUP"; 
}, $text); 
+0

您的PHP版本是否支持关闭? – 2010-09-07 09:21:50

+0

@Mike B.我使用PHP 5.2,所以我猜不是。 – Mike 2010-09-07 09:24:05

+3

您至少需要php 5.3:http://php.net/manual/en/functions.anonymous.php – jigfox 2010-09-07 09:24:52

回答

20

发生在PHP超过5.3时。匿名函数支持直到5.3才可用,所以PHP将无法识别作为参数传递的函数签名。

你必须创建一个函数的传统方式,并通过它的名字,而不是(我用link_code()为例):

function link_code(array $matches) { 
    if (filter_var($matches[1], FILTER_VALIDATE_URL)) 
     return '<a href="'. 
      htmlspecialchars($matches[1], ENT_QUOTES). 
      '" target="_blank">'. 
      htmlspecialchars($matches[2])."</a>"; 
    else 
     return "INVALID MARKUP"; 
} 

preg_replace_callback("/\\[LINK\=(.*?)\\\](.*?)\\[\/LINK\\]/is", 'link_code', $text); 

而且,array $matches是没有问题的,因为支持数组类型提示在PHP 5.2中。

+0

非常好,谢谢。 – Mike 2010-09-07 10:18:18

相关问题