2010-09-07 5 views
7

Ciao Sto usando il seguente codice, ma sto ricevendo un errore di sintassi "T_FUNCTION imprevisto" per la seconda riga. Eventuali suggerimenti?

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

La tua versione di PHP supporta le chiusure? –

+0

@Mike B. Io uso PHP 5.2 quindi non credo. – Mike

+3

Hai bisogno almeno di php 5.3: http://php.net/manual/en/functions.anonymous.php – jigfox

risposta

20

Ciò accade quando il PHP è precedente a 5.3. Il supporto della funzione anonima non era disponibile fino al 5.3, quindi PHP non riconoscerà le firme di funzioni passate come parametri simili.

Dovrete creare una funzione nel modo tradizionale, e passa il suo nome invece (io uso link_code() per esempio):

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); 

Inoltre, array $matches non è un problema perché il tipo di hinting per gli array è supportato in PHP 5.2.

+0

Eccellente, grazie. – Mike