1

我发现u在处理 UTF-8 字符串时使用修饰符有时会有所帮助,但在我的 Linux 服务器上,它会替换变音符号,-而不是像在我的 Windows 服务器上一样保留它。

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

Linux: Test--f-G

Windows(应该如此): Test--föG

4

1 回答 1

2

来自PCRE 模块的 PHP 文档

在 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");
于 2013-05-31T18:35:11.503 回答