Bonjour à tous,

Je travail actuellement sur un annuaire téléphonique en lien avec un active directory. Je me confronte à un soucis lorsque je veux filtrer certaines OU de mon active directoy lorsque le nom d'un de ces OU comprend un accent et je ne trouve pas le moyen de passer cela.. Je vous montre pour que vous puissiez mieux comprendre.

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
/*****************************************************************************
    * Cherche les informations d'un utilisateur ldap
    * @param $type = nom du champ à filtrer
    * @param $valeur = valeur du champ à filtre
    * @return $this->returnEntries($search) = Résultat de la requête
    *****************************************************************************/
    public function searchUserBy($type, $valeur = null, $perim = null) {
        // methode permettant de rechercher un utilisateur
        $perimRecherch = $this->conf['ldap']['basednUtilisateurs'];                
 
        $filter = "";
        if(is_array($type)) {
            $filter = "(&(objectClass=user)(objectCategory=person)";
            foreach($type as $field => $value) {
                $filter .= "(".$field."=".$value.")";                
            }
            $filter .= ")";
        } else {
            switch ($type) {
                case 'sn' :  case 'cn' : case 'telephonenumber' : case 'employeenumber' : case 'samaccountname' : case 'mail' :
                    $filter = "(&(objectClass=user)(objectCategory=person)(".$type."=".$valeur."))";
                    break;
                case 'filter' :
                    $filter = $valeur;
                    $perimRecherch = $perim . $perimRecherch;
                    break;
                default : 
                    return $this->AddError(__FUNCTION__ . ":" . __LINE__ . '# ' . 'Aucun type précisé, ou type invalide');
            }
 
        }
 
        $search = @ldap_search($this->conf['ldap']['connexion'], $perimRecherch, $filter); // on recherche dans tous les utilisateurs
 
        if ($search == false) {
            return $this->AddError(__FUNCTION__ . ":" . __LINE__ . '# ' . "Erreur de recherche dans Ldap");
        }
 
        return $this->returnEntries($search);
    }
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
/*****************************************************************************
    * Recrée l'aborescence du LDAP, de la Direction aux services de tout niveau
    * @return $array = Tableau contenant l'arbo du LDAP
    *****************************************************************************/
  public function getServiceByDirection() {
 
 
       $filtre = "(&(!(OU=Formation))(!(OU=Présidence)) (!(OU=Intervenants Exterieurs))(!(OU=Comptes Admin))(!(OU=Maison des Syndicats))(!(OU=stagiaires))(!(OU=groupe*))(!(OU=emploi*))(!(OU=proxy*))(!(OU=test*))(!(OU=Blocage*))(!(OU=Salle*))(!(CN=*)))";
        $results = $this->searchUserBy("filter", $filtre);
 
 
        $array = array();
 
 
        foreach($results as $result){
            if(!isset($result['name'])) continue;
            $name = $this->protect(utf8_decode($result['name'][0]));
            if($result['dn'] != $this->conf['ldap']['basednUtilisateurs'] && $result['dn'] != "" && $name != "") {
                $dn = $this->parseDN(utf8_decode($result['dn']));
 
                $create_array = "\$array";
                for($i = sizeof($dn); $i > 1; $i--) {
                    $key = $this->protect($dn[$i-1]);
                    $create_array .= "[\"$key\"]";
                }
 
                $create_array .= "[\"$name\"] = array();";
                eval("$create_array");
            }
        }
        // Plus simple de les supprimer de cette manière au lieu de faire un filtre LDAP.
        // C'est une sécurité, car si ces UO ont des UO enfants non retiré dans le filtre
        // ils apparaitront quand même dans le résultat de la requête
        unset($array['Intervenants Exterieurs']);
        unset($array['Formation']);
        unset($array['Maison des Syndicats']);
 
        return $array;
    }
Par exemple j'aimerais également filtrer sur l'OU "Présidence" mais cela bloque à cause de l'accent, j'ai essayé diverses manipulations pour contourner le soucis mais rien ne passe.
Si jamais quelqu'un aurait une petite idée du pourquoi.

Merci.