J'ai le code php suivant dans un fichier php utf-8 :
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'));
Je voudrais que la dernière regex ne remplace que les mots complets et non les parties de mots.
Sur mon ordinateur Windows, il revient :
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)
Sur le serveur web (linux), j'obtiens :
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"
Ainsi, la regex fonctionne comme prévu sous Windows mais pas sous Linux.
La question principale est donc la suivante : comment dois-je écrire mon expression rationnelle pour qu'elle ne corresponde qu'aux limites des mots ?
Une question secondaire est de savoir comment je peux faire savoir à Windows que je veux utiliser utf-8 dans mon application php.