J'ai wamp 3.1.4 d'installé sur mon ordi (en locale) avec Apache 2.4.35 et PHP 7.2.10 et lorsque j'utilise la fonction PHP strtolower les accents sont remplacés par des carrés noir avec un point d'interrogation.
Mon site est en UTF-8, les accents s'affichent normalement sur les pages de mon site sauf lorsque j'utilise cette fonction strtolower.
J'ai un serveur dédié (production) CentOS Linux 7.7.1908 avec Plesk Onyx et j'ai sur cette config la version PHP 7.2.24 et lorsque j'utilise les fonctions strtolower sur ce serveur les accents s'affichent correctement. Je suis aussi en UTF-8.
Pourquoi en locale les accents s'affichent pas alors qu'ils s'affichent en production ?
Je sais que l'on peut remplacer la fonction strtolower par mb_strtolower pour ne plus avoir ce problème d'accents mais je voudrais savoir si on ne peut pas solutionner le problème en configurant PHP d'une certaine façon ce qui m'éviterait de remplacer sur toutes mes pages cette fonction php (j'ai beaucoup de pages et de sites) !
Que dit la documentation PHP (Toujours lire la documentation en premier) :
Retourne string, après avoir converti tous les caractères alphabétiques en minuscules.
Notez que la notion d'"alphabétique" est déterminée par la configuration de localisation. Cela signifie que pour la configuration par défaut "C", les caractères tels que les voyelles accentuées (comme é, è ou à) ne seront pas convertis.
Je suis entrain de changer l'encodage de mes sites web, ils étaient en iso-8859-1 et j'avais pas de problème d'accent sur mon ordi mais en changeant l'encodage de mes sites en utf-8 ce problème d'accents apparait (uniquement en locale, sur mon ordi).
J'ai aussi une ancienne version de wamp qui est installé sur mon ordi (windows 7) et qui est dans C:\\wamp_old\
Il y a peut-être un confit entre cette ancienne version (mes sites étaient encodés en iso-8859-1 sur cette version de wamp) et la nouvelle version de wamp (ou mes sites sont encodés en utf-8 ainsi que dans le php.ini) ?
Est-ce un problème de config du php.ini dans wamp ? Avez-vous des pistes pour essayer de résoudre ce problème ?
Lorsque vous installez wamp sur votre ordi (sous windows), que php.ini est en utf-8 et que l'encodage de vos sites est en utf-8, rencontrez-vous ce problème d'accents avec la fonction strtolower ?
Modifie 1 fois. Derniere modification le 31/01/2020 à 21:16 par Nono42.
D'une part, de base, il n'existe aucune directive de jeu de caractères dans les fichiers php.ini et phpForApache.ini de Wampserver et de toutes ses versions de PHP ainsi d'ailleurs que dans les fichiers my.ini pour MySQL et MariaDB.
C'est PHP lui-même qui peut définir un jeu de caractère par défaut selon sa version.
D'autre part, il ne faut pas mélanger les déclarations du jeu de caractères utilisé dans une page html avec le jeu de caractère utilisé par PHP ; ce sont deux directives différentes.
Comme indiqué précédemment, par la documentation PHP : “Notez que la notion d'"alphabétique" est déterminée par la configuration de localisation” signifie que le jeu de caractères utilisé par les fonctions php qui en ont besoin, comme strtolower, est déterminé par set_locale voir [www.php.net] et en particulier par la constante LC_CTYPE, par exemple setlocale(LC_CTYPE, 'fr_FR.UTF8');
Je ne peux que vous conseiller d'utiliser mb_strtolower() voir la doc [www.php.net] qui comporte un paramètre 'encoding' qui est l'encodage des caractères. S'il est omis, l'encodage de caractères interne sera utilisé. Contrairement à strtolower(), le concept de caractère 'alphabétique' est déterminé par les propriétés Unicode. De ce fait, le comportement de cette fonction n'est pas modifié par les configurations locales, et elle peut convertir tout les caractères qui sont considérés comme alphabétiques comme le c cédille (ç).
Effectuer des remplacements multiples de 'strtolower(' par 'mb_strtolower(' dans plusieurs fichiers d'une arborescence est du domaine d'éditeurs de texte dignes de ce nom et prend peu de temps.
Effectivement lorsque j'utilise la fonction mb_strtolower les accents s'affichent correctement sur mon ordi (qui est sous windows 7).
Mais là ou j'ai du mal à comprendre c'est que sur ce même ordi les accents s'affichaient correctement lorsque mes sites étaient encodés en iso-8859-1 et que le default_charset du php.ini de wamp était à default_charset = "iso-8859-1".
Pourquoi avec le default_charset = "iso-8859-1" et l''encodage de mes sites en iso-8859-1 les accents s'affichent et pourquoi avec le default_charset = "UTF-8" et l''encodage de mes sites en utf-8 les accents ne s'affichent plus correctement (c'est le même ordi) ?
Relisez ! strtolower dépend de la locale et non pas de default_charset, laquelle locale, même correctement définie, peut être modifiée à tout moment et indépendamment de votre volonté.