2010-09-07 46 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

相關問題