2010-09-07 9 views
7

Hola, estoy usando el siguiente código pero obtengo un error de sintaxis "T_FUNCTION" inesperado para la segunda línea. ¿Alguna sugerencia?

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

¿Su versión de PHP admite cierres? –

+0

@Mike B. Uso PHP 5.2 así que supongo que no. – Mike

+3

Necesita al menos php 5.3: http://php.net/manual/en/functions.anonymous.php – jigfox

Respuesta

20

Eso ocurre cuando su PHP es anterior a 5.3. El soporte de función anónima no estaba disponible hasta 5.3, por lo que PHP no reconocerá las firmas de funciones pasadas como parámetros como ese.

Vas a tener que crear una función de la forma tradicional, y pasar su nombre en su lugar (yo uso link_code() por ejemplo):

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

Además, array $matches no es un problema porque se admite el tipo de insinuación para las matrices en PHP 5.2.

+0

Excelente, gracias. – Mike

Cuestiones relacionadas