Search code examples
phpcompatibility

Alternative for preg_replace_callback() in PHP 8.1?


I have the following code:

$comment_content = preg_replace_callback('/\[([^][]*)]\(([^()]*)\)|(\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|])/i',
    create_function('$m','
      if(isset($m[3])) {
          return "<span><a href=\"".$m[3]."\" target=\"_blank\">آدرس بدون عنوان</a></span>";
       } else {
          return "<span><a href=\"".$m[2]."\" target=\"_blank\">".$m[1]."</a></span>";
                        }
     '), $comment_content);

That was working well on PHP 7.2, but since I've changed my server to Ubuntu 22.04 and it uses PHP 8.1, now that code is broken.

Any idea how can I fix it?


Solution

  • $comment_content = preg_replace_callback('/\[([^][]*)]\(([^()]*)\)|(\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|])/i',
        function ($m) {
            if (isset($m[3])) {
                return "<span><a href=\"".$m[3]."\" target=\"_blank\">آدرس بدون عنوان</a></span>";
            } else {
                return "<span><a href=\"".$m[2]."\" target=\"_blank\">".$m[1]."</a></span>";
            }
        },
        $comment_content
    );