迁移至新的服务器之后,报错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方法进行正则替换