我在一个utf-8编码的php文件中有以下的php代码:
var_dump(setlocale(LC_CTYPE, 'de_DE.utf8', 'German_Germany.utf-8', 'de_DE', 'german'));
var_dump(mb_internal_encoding());
var_dump(mb_internal_encoding('utf-8'));
var_dump(mb_internal_encoding());
var_dump(mb_regex_encoding());
var_dump(mb_regex_encoding('utf-8'));
var_dump(mb_regex_encoding());
var_dump(preg_replace('/\bweiß\b/iu', 'weiss', 'weißbier'));
我想让最后一个正则表达式仅替换完整的单词而不是单词的部分。
在我的Windows电脑上,它返回:
string 'German_Germany.1252' (length=19)
string 'ISO-8859-1' (length=10)
boolean true
string 'UTF-8' (length=5)
string 'EUC-JP' (length=6)
boolean true
string 'UTF-8' (length=5)
string 'weißbier' (length=9)
在Web服务器(Linux)上,我得到:
string(10) "de_DE.utf8"
string(10) "ISO-8859-1"
bool(true)
string(5) "UTF-8"
string(10) "ISO-8859-1"
bool(true)
string(5) "UTF-8"
string(9) "weissbier"
因此,该正则表达式在Windows上按照我的预期工作,但在Linux上却不是。
所以主要问题是,我应该如何编写我的正则表达式才能只在单词边界进行匹配?
另一个问题是我如何让Windows知道我想在PHP应用程序中使用UTF-8。
\w
和\b
似乎按预期工作,但它们绝对不是您可以依赖的东西,因为当您部署应用程序时它们可能会出现问题。 - Álvaro González