У меня есть базовый скрипт в движке чата, который ищет URL-адреса и делает их кликабельными для пользователей. Я использую php 5.6, поэтому я получаю предупреждение о preg_replace
и использую функцию обратного вызова. Несмотря на то, что я могу делать это обычно с помощью функции, я создаю этот возврат с использованием довольно сложного массива и возвращаю его в другой сложный массив.
Вот код, который я сейчас использую:
return preg_replace(
array(
'/(?(?=<a[^>]*>.+<\/a>)(?:<a[^>]*>.+<\/a>)|([^="\']?)((?:https?|ftp|bf2|):\/\/[^<> \n\r]+))/iex',
'/<a([^>]*)target="?[^"\']+"?/i',
'/<a([^>]+)>/i',
'/(^|\s)(www.[^<> \n\r]+)/iex',
'/(([_A-Za-z0-9-]+)(\\.[_A-Za-z0-9-]+)*@([A-Za-z0-9-]+)(\\.[A-Za-z0-9-]+)*)/iex'
),
array(
"stripslashes((strlen('\\2')>0?'\\1<a href=\"\\2\">\\2</a> <i class=\"fas fa-external-link-alt\"></i>\\3':'\\0'))",
'<a\\1',
'<a\\1 target="_blank">',
"stripslashes((strlen('\\2')>0?'\\1<a href=\"http://\\2\">\\2</a> <i class=\"fas fa-external-link-alt\"></i>\\3':'\\0'))",
"stripslashes((strlen('\\2')>0?'<a href=\"mailto:\\0\">\\0</a>':'\\0'))"
),
$text
);
У меня вопрос, как я могу переписать свой второй аргумент, чтобы он работал, используя preg_replace_callback
, поскольку я использую массивы. Это IS похоже на некоторые другие вопросы, но они не возвращают свои значения или сравнивают их с помощью массива, и я попытался написать функцию возврата, аналогичную тому, что используют другие ответы, и она просто не работает , Любая помощь с этим будет оценена!