Bonjour,

J'ai une au question qui me turlupine depuis pas mal d'heures...
Je viens de modifier tout l'encodage de mon site passé à l'unicode. Tout est ok aucun problème dans l'immédiat, les caractères spéciaux sont invisibles à l’œil dans l'ensemble des environnements...
le serveur, les bdd, la méta html... okii

Cette modification à des impacts indirects sur les fonctions (latines) incompatibles du aux caractère accentués (nbre d'octets...).
Notamment strlen, substr, substr_count qui sont remplacé respectivement par mb_strlen, mb_substr, mb_substr_count.

Mais malheureusement certaine fonctions n'ont pas leur équivalent direct.. bien sûre, ce serait trop façile...
Donc ça se complique au niveau de la fonction strtr!!! ainsi que pour les regex (mais bon je traiterais ce second impact après)

Je note bien les moyens de contourner expliqués sur ce site (array de remplacement des accents (suppression)). ce que je comprends sur les divers forum, pour ma part, c'est une fois les accents supprimés les caractères sont bien sur un octet et donc la fonction latines applicable. Ce n'est qu'un moyen de contourner qui peut vite trouver ses limites car c'est bien sur une chaîne UFT-8 qu'on applique la fonction latine strtr(), la variable étant vidée des accents cette dernières fonctionne...
Pour confirmer cela on remarque bien que les fonction strlen, substr, substr_count fonctionnent très bien dans l'unicode quand il n'y a pas d'accent... Le moyen de contournement expliqué ci dessus pourrait aussi s'appliquer si ces dernières n'avaient par leur équivalent pour l'unicode...

Le problème, dans mon cas, c'est que je ne veux pas supprimer l'accent mais le mettre en majuscule, quand c'est la première lettre de ma variable!! ainsi étant tout en UTF-8 j'ai pensé à cela:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
$adresse_post = strtr(utf8_decode($_POST['adresse'][0]), 'ç, é, è, ê, ë, à, â, î, ï, ô, ù, û', 'Ç, É, È, Ê, Ë, À, Â, Î, Ï, Ô, Ù, Û');
$adresse_post = utf8_encode($adresse_post);
Sans succès..

alors j'ai essayé
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
$adresse_post=iconv("UTF-8","ISO-8859-1",$_POST['adresse']);
$adresse_post = str_replace($adresse_post[0], 'ç, é, è, ê, ë, à, â, î, ï, ô, ù, û', 'Ç, É, È, Ê, Ë, À, Â, Î, Ï, Ô, Ù, Û');
$adresse_post=iconv("ISO-8859-1","UTF-8",$adresse_post);
toujours sans succès..

Je pensais que repasser en latin pour appliquer des fonctions (latines)était un bon moyen de contournement...

Quelqu'un pourrait m'aider!!? une idée? S'il-vous-plaît.
Je vous remercie.