Php preg_替换为:alnum:和UTF-8

Php preg_替换为:alnum:和UTF-8,php,utf-8,preg-replace,Php,Utf 8,Preg Replace,我发现在使用UTF-8字符串时,使用u修饰符有时会有所帮助,但在我的Linux服务器上,它将umlaut替换为-,而将其保留在Windows服务器上 mb_internal_encoding('UTF-8'); function clean($string) { return preg_replace('/[^[:alnum:]]/ui', '-', $string); } echo clean("Test: föG"); Linux: 测试——f-G Windows(应为): 测试

我发现在使用UTF-8字符串时,使用
u
修饰符有时会有所帮助,但在我的Linux服务器上,它将umlaut替换为
-
,而将其保留在Windows服务器上

mb_internal_encoding('UTF-8');
function clean($string) {
    return preg_replace('/[^[:alnum:]]/ui', '-', $string);
}
echo clean("Test: föG"); 
Linux:
测试——f-G

Windows(应为):
测试——föG

来自:

在UTF-8模式下,值大于128的字符与任何POSIX字符类都不匹配

这可能是因为效率原因:有许多Unicode字符。可以使用Unicode字符属性而不是POSIX字符类编写正则表达式。不过,这会稍微慢一些

<?php
mb_internal_encoding('UTF-8');
function clean($string) {
        return preg_replace('/[^\\p{L}\\p{N}]/ui', '-', $string);
}
echo clean("Test: föG");

如果将UTF-8更改为其他版本,会发生什么情况?例如
charset=windows-1252
。您的意思是
mb_内部编码('windows-1252')
?不会改变任何事情…像那样的事情。你试过把它全部删除吗?同样,删除那一行也不会改变任何东西。如果你试着以某种方式使用
utf8\u encode
,那会怎么样?一定要处理组合变音符号:(
(?工作:)