Bonjour,

Je fais des tests avec le même site sur différents serveurs et les résultats obtenus m'étonnent.

Contexte : Dév PHP avec base de données MySQL (exemples : http://aleph2at.free.fr ou http://www.aleph2at.fr)

Je fais des tests sur 3 serveurs :
- free.fr
Base de données MySQL et tables en UTF8 version 5.3.x de PHP
- alwaysdata
Base de données MySQL et tables en UTF8 version 7.2.x de PHP
-localhost
Base de données MySQL et tables en UTF8 version 7.2.x de PHP

Tous les php des 3 serveurs sont issus d'une même source (mon workspace sous eclipse) en UTF8 sauf un fichier encodé en ANSI pour les serveurs Free.fr et localhost :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?php
 
function sans_accents($string)
// Retoune une chaine de caractère sans les accents
{
    $translit = array(
        'Á' => 'A',
        'À' => 'A',
        'Â' => 'A',
        'Ä' => 'A',
        'Ã' => 'A',
        'Å' => 'A',
        'Ç' => 'C',
        'É' => 'E',
        'È' => 'E',
        'Ê' => 'E',
        'Ë' => 'E',
        'Í' => 'I',
        'Ï' => 'I',
        'Î' => 'I',
        'Ì' => 'I',
        'Ñ' => 'N',
        'Ó' => 'O',
        'Ò' => 'O',
        'Ô' => 'O',
        'Ö' => 'O',
        'Õ' => 'O',
        'Ú' => 'U',
        'Ù' => 'U',
        'Û' => 'U',
        'Ü' => 'U',
        'Ý' => 'Y',
        'á' => 'a',
        'à' => 'a',
        'â' => 'a',
        'ä' => 'a',
        'ã' => 'a',
        'å' => 'a',
        'ç' => 'c',
        'é' => 'e',
        'è' => 'e',
        'ê' => 'e',
        'ë' => 'e',
        'í' => 'i',
        'ì' => 'i',
        'î' => 'i',
        'ï' => 'i',
        'ñ' => 'n',
        'ó' => 'o',
        'ò' => 'o',
        'ô' => 'o',
        'ö' => 'o',
        'õ' => 'o',
        'ú' => 'u',
        'ù' => 'u',
        'û' => 'u',
        'ü' => 'u',
        'ý' => 'y',
        'ÿ' => 'y'
    );
    $string = strtr($string, $translit);
    return preg_replace('#[^a-zA-Z0-9\-\._]#', ' ', $string);
}
 
?>
donc si ce fichier PHP est en ANSI sur free.fr et localhost, le tri se fait correctement et si ce fichier PHP est en UTF8 sur alwaysdata, le tri se fait correctement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
    foreach ($return2 as $key => $row) 
    // On mappe la clé Nom2 pour le tri multiple
    {
        $El_Nom[$key] = strtolower($row['Nom2']);
    }
  $El_Nom_sans_accent = array_map('sans_accents', $El_Nom); // On enlève les accents sur le tableau $El_Nom qui contient les noms avec accents
    array_multisort($El_Nom_sans_accent, SORT_ASC, SORT_STRING, $return2); // On fait le tri multiple en appliquant le tri d'El_Nom_sans_accent à $return2 qui contient la liste avec accent
Si je passe le fichier de la fonction sans_accents en UTF8 sur localhost ou free.Fr, le tri est incorrect.
Si je passe le fichier de la fonction sans_accents en ANSI sur alwaysdata, le tri est incorrect.

Je pense que la solution est toute bête mais pour l'instant je ne la vois pas.

Une idée ?