Php preg_replace,字符转义&;重音字符/u在一台服务器上工作,但在另一台服务器上不工作

Php preg_replace,字符转义&;重音字符/u在一台服务器上工作,但在另一台服务器上不工作,php,regex,utf-8,pcre,Php,Regex,Utf 8,Pcre,我有以下代码: preg_replace('/[^\w-]/u','.','Bréánná MÓÚLÍN'); 服务器A(PHP5.3.5)上的哪个返回: “Brännán.Mólín”(应该如此) 但是,在服务器B(PHP5.2.11)上,它返回: “Br..n..M..l.n”(根本不是我想要的) 我认为这取决于整个编译过程中是否设置了PCRE_UCP,这对吗 如果是这样的话,有什么方法可以推翻这一点吗 如果做不到这一点,有没有办法轻松地用“标准”等效字符替换这些字符?(与utf8_de

我有以下代码:

 preg_replace('/[^\w-]/u','.','Bréánná MÓÚLÍN');
服务器A(PHP5.3.5)上的哪个返回:
“Brännán.Mólín”(应该如此)

但是,在服务器B(PHP5.2.11)上,它返回:
“Br..n..M..l.n”(根本不是我想要的)

我认为这取决于整个编译过程中是否设置了PCRE_UCP,这对吗

如果是这样的话,有什么方法可以推翻这一点吗


如果做不到这一点,有没有办法轻松地用“标准”等效字符替换这些字符?(与utf8_decode类似,但更具扩展性)

我不确定编译期间定义的
PCRE_UCP
是否会影响
preg_replace()
,但解决问题的方法是使用多字节字符串函数:


有趣的是,我试图用一个字符替换非单词字符(也不是连字符)。然而,这段代码并没有完成。\\pL和\\pN是什么?我对它们不熟悉,所以我不知道如何更改它以实现我的目的。@toukokoukan:它们通过Unicode属性指定字符集。请参阅:@Toukakoukan:我发现多字节ereg函数不支持通过Unicode属性指定字符的特殊
\p{…}
PCRE语法。请参阅我的最新答案。
<?php
mb_internal_encoding("UTF-8");
mb_regex_encoding("UTF-8");

echo mb_ereg_replace('[^0-9A-Za-zÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌-‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�̀-ͯ‿-⁀\\-]','.','Bréánná MÓÚLÍN');
import java.io.*;

public class SO7456963 {
    public static void main(String[] args) throws Throwable {
        Writer w = new OutputStreamWriter(new FileOutputStream("SO7456963.txt"), "UTF-8");
        w.write("[^0-9A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u0300-\u036F\u203F-\u2040\\\\-]");
        w.close();
    }
}