PHP-Regex-Wortgrenzenabgleich in utf-8

Ich habe den folgenden PHP-Code in einer UTF-8-PHP-Datei:

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'));

Ich möchte, dass der letzte reguläre Ausdruck nur vollständige Wörter und keine Wortteile ersetzt.

Auf meinem Windows-Computer wird Folgendes zurückgegeben:

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)

Auf dem Webserver (Linux) bekomme ich:

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"

Somit funktioniert der reguläre Ausdruck unter Windows wie erwartet, jedoch nicht unter Linux.

Die Hauptfrage ist also, wie ich meinen regulären Ausdruck so schreiben soll, dass er nur an Wortgrenzen übereinstimmt.

Eine zweite Frage ist, wie ich Windows mitteilen kann, dass ich utf-8 in meiner PHP-Anwendung verwenden möchte.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage