Typecho插件报错:Call to undefined function Typecho\mb_regex_encoding()

迁移至新的服务器之后,报错mbstring 的正则相关函数不存在

解决方案

修改 /src/var/Typecho/Common.php 中 slugName 方法

public static function slugName( ? string $str, ? string $default = null, int $maxLength = 128): ? string {
    $str = trim($str ? ? '');

    if (!strlen($str)) {
        return $default;
    }

    mb_regex_encoding('UTF-8');
    mb_ereg_search_init($str, "[\w".preg_quote('_-').
        "]+");
    $result = mb_ereg_search();
    $return = '';

    if ($result) {
        $regs = mb_ereg_search_getregs();
        $pos = 0;
        do {
            $return. = ($pos > 0 ? '-' : '').$regs[0];
            $pos++;
        } while ($regs = mb_ereg_search_regs());
    }

    $str = trim($return, '-_');
    $str = !strlen($str) ? $default : $str;
    return substr($str, 0, $maxLength);
}

替换为

public static function slugName( ? string $str, ? string $default = null, int $maxLength = 128): ? string {
     $str = trim($str ? ? '');

     if (!strlen($str)) {
         return $default;
     }

     // 使用 PCRE 正则表达式进行匹配
     $pattern = "/[\w".preg_quote('_-').
     "]+/";
     preg_match_all($pattern, $str, $matches);

     $return = '';

     if (!empty($matches[0])) {
         $return = implode('-', $matches[0]);
     }

     $str = trim($return, '-_');
     $str = !strlen($str) ? $default : $str;
     return substr($str, 0, $maxLength);
 }

因为有些服务器的mbstring库有问题,在不能重新编译PHP的情况下,使用PHP的PCRE方法进行正则替换

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值