Привет, я использую следующий код, но я получаю синтаксическую ошибку «неожиданного 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);
Это происходит, когда ваш 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
не является проблемой, потому что тип hinting для массивов поддерживается в PHP 5.2.