preg_replace_callback 要求参数 2 是一个有效的回调...卡住了!

2024-05-12

public function make_url_clickable_cb($matches) {
$ret = '';
$url = $matches[2];

if ( empty($url) )
    return $matches[0];
// removed trailing [.,;:] from URL
if ( in_array(substr($url, -1), array('.', ',', ';', ':')) === true ) {
    $ret = substr($url, -1);
    $url = substr($url, 0, strlen($url)-1);
}
return $matches[1] . "<a href=\"$url\" rel=\"nofollow\">" . $this->truncate($url, 35, '...'). "</a>" . $ret;
}

public function make_web_ftp_clickable_cb($matches) {
    $ret = '';
    $dest = $matches[2];
    $dest = 'http://' . $dest;

    if ( empty($dest) )
        return $matches[0];
    // removed trailing [,;:] from URL
    if ( in_array(substr($dest, -1), array('.', ',', ';', ':')) === true ) {
        $ret = substr($dest, -1);
        $dest = substr($dest, 0, strlen($dest)-1);
    }
    return $matches[1] . "<a href=\"$dest\" rel=\"nofollow\">$dest</a>" . $ret;
}

public function make_email_clickable_cb($matches) {
    $email = $matches[2] . '@' . $matches[3];
    return $matches[1] . "<a href=\"mailto:$email\">$email</a>";
}
public function make_clickable($ret) {
    $ret = ' ' . $ret;
    // in testing, using arrays here was found to be faster
    $ret = preg_replace_callback('#([\s>])([\w]+?://[\w\\x80-\\xff\#$%&~/.\-;:=,?@\[\]+]*)#is', 'Main::make_url_clickable_cb', $ret);
    $ret = preg_replace_callback('#([\s>])((www|ftp)\.[\w\\x80-\\xff\#$%&~/.\-;:=,?@\[\]+]*)#is', 'Main::make_web_ftp_clickable_cb', $ret);
    $ret = preg_replace_callback('#([\s>])([.0-9a-z_+-]+)@(([0-9a-z-]+\.)+[0-9a-z]{2,})#i', 'Main::make_email_clickable_cb', $ret);

    // this one is not in an array because we need it to run last, for cleanup of accidental links within links
    $ret = preg_replace("#(<a( [^>]+?>|>))<a [^>]+?>([^>]+?)</a></a>#i", "$1$3</a>", $ret);
    $ret = trim($ret);
    return $ret;
}

为什么这不起作用? 我收到这些错误:

警告:preg_replace_callback() [function.preg-replace-callback]:需要参数 2“Main::make_url_clickable_cb”作为第 134 行中的有效回调

警告:preg_replace_callback() [function.preg-replace-callback]:需要参数 2“Main::make_web_ftp_clickable_cb”作为第 135 行中的有效回调

警告:preg_replace_callback() [function.preg-replace-callback]:需要参数 2“Main::make_email_clickable_cb”作为第 136 行中的有效回调


如果您传递单个字符串作为回调,PHP 会将其解释为函数的名称 - 并且Main::make_web_ftp_clickable_cb不是有效的函数名称;


如果你想指定一个类的静态方法作为回调,您必须使用:

array('Main', 'make_web_ftp_clickable_cb')

而且,如果您想指定对象的方法、类的实例,则必须使用:

array($object, 'make_web_ftp_clickable_cb')


这是手册的相关部分:本文档中使用的伪类型和变量 - 回调 http://www.php.net/manual/en/language.pseudo-types.php#language.types.callback

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

preg_replace_callback 要求参数 2 是一个有效的回调...卡住了! 的相关文章

随机推荐

  • Twilio webRTC 通话在 10 分钟后中断

    使用 Twilio js 使用 webRTC 录制通话 工作正常 但在 10 分钟时 完全正确 电话挂断 TwiML 上的最大记录时间设置为 7200 秒 浏览器的控制台显示 Twilio PeerConnection signalingS
  • 让按钮更容易点击

    我有一个按钮 在某些手机上由于尺寸太大而很难点击 但让它变大会破坏布局 可以向视图解释它有一个比其可见区域更大的 点击框 吗 不确定这是否有帮助 如果您使用没有背景的 ImageButton 并设置 Padding 值 您的按钮将具有更大的
  • 如何在 Bootstrap 4 中隐藏和替换 navbar-toggler-icon?

    如何隐藏和替换 Bootstrap 4 中的导航栏切换图标 现在 下面的代码只是将 X 放在汉堡菜单下方
  • 是否可以共享 Symfony2 安装(一台服务器上的多个网站 [域])

    我想在一个根 服务器 下托管多个基于 Symfony2 的网站 是否可以共享 symfony 自己的文件 供应商等 有人知道教程吗 管理起来困难吗 AFAIK Symfony 安装大约有 600MB 我不想以冗余方式保存它 我看起来确实有可
  • ModuleNotFoundError:没有名为“pdfminer.high_level”的模块

    我在 pycharm 中从事项目 我想使用 pdfminer 将 pdf 文件转换为文本文件 我的问题是 当我运行该应用程序时 它无法工作 并且显示此错误消息 ModuleNotFoundError 没有名为 pdfminer high l
  • JS - 不可破坏空间的转换   [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在从 HTML 元素中读出文本并
  • 确保 config.h 包含一次

    我有一个库项目 正在使用 Linux 中的 autotools 套件移植到该项目 我对自动工具很陌生 本周 我已经了解了其操作的基础知识 我有一个关于如何保留内容的问题config h免遭重新定义 我惊讶地发现生成的config h文件也没
  • Heroku:无法通过 Bundler 安装 gem

    我尝试使用以下命令将我的 Rails 应用程序推送到 Herokugit push heroku master f命令 我得到这个 Total 0 delta 0 reused 0 delta 0 remote Compressing so
  • 如何在部署作业期间设置 XML 转换的环境名称?

    好的 伙计们 给 Azure多级管道尝试一下 但不太幸运地使用部署作业进行 xml 转换 Update 这没有使用 Azure DevOps 中的经典部署 发布 UI 到目前为止我所做的 从构建过程中删除转换 尝试一次构建并随处部署 通过删
  • 错误:“uint16_t”未声明? [复制]

    这个问题在这里已经有答案了 我有代码 include
  • 身份验证和用户任务

    我正在考虑开发一个具有明确定义域的系统 主要基于网络 域的一部分包括像这样的实体Diary Booking Customer etc 不过我创建了另一个名为User其目的仅用于身份验证和授权 污染Customer具有特定于身份验证的数据的实
  • 从架构中删除表 - Rails

    我想删除架构中的一个表 我在第一次启动项目时创建了数据库并希望删除该表 这样做的最佳方法是什么 I tried rails g migration drop table installs但这只会创建一个空迁移 Schema create t
  • 匹配同一端口上不同路径的 Istio 虚拟服务路由

    我想知道如何在同一端口上匹配 gRPC 路由 以下是我希望通过 VirtualService 实现的目标的示例 apiVersion networking istio io v1alpha3 kind VirtualService meta
  • 使用 System.Threading.Tasks.Task 而不是 Stream

    我在以前版本的 WCF Web API 上使用了如下方法 grab the posted stream Stream stream request Content ContentReadStream write it to using Fi
  • opencv 2.3.* 读取不工作

    我无法让 imread 工作 与这个人有同样的问题 OpenCV imwrite 2 2 在 Windows 7 上导致异常 并显示消息 OpenCV 错误 未指定错误 无法找到指定扩展名的编写器 https stackoverflow c
  • 如何在使用 Active Storage 上传之前调整图像大小(与 AWS 链接)

    我尝试将 Active Storage 与 Amazon Web Services 结合使用 而不是 Carrierwave 和 Cloudinary 使用 Carrierwave 我有一些功能可以在通过上传器控制器上传之前调整图像大小 但
  • execlp 多个“程序”

    我想运行类似的东西 cat file tar base64 myprogram c base64 d tar zvt I use execlp运行该进程 当我尝试运行类似的东西时cat它有效 但如果我尝试运行base64 d tar zvt
  • 匹配不包含超过 x 个连续字符的字符串的正则表达式是什么

    我想要匹配不包含连续 3 个以上重复的相同字符的字符串 所以 abaaaa 不匹配 abawdasd 比赛 abbbbasda 不匹配 巴巴巴巴 比赛 是的 对包含连续字符进行正则表达式匹配 然后在代码中对其进行否定会更容易 更简洁 然而
  • 在 PowerShell 中,将两个表合并为一个表的最佳方法是什么?

    我对 PowerShell 相当陌生 想知道是否有人知道解决以下示例问题的更好方法 我有一组从 IP 地址到主机名的映射 这表示活动 DHCP 租约的列表 PS H gt leases IP Name 192 168 1 1 Apple 1
  • preg_replace_callback 要求参数 2 是一个有效的回调...卡住了!

    public function make url clickable cb matches ret url matches 2 if empty url return matches 0 removed trailing from URL