私が取り組んでいるphpページでは、LDAP接続が確立され、そこからcnエントリのリストがプルされてドロップダウンに入れられます。ドロップダウンからの選択は、フォーム送信を介して別の php scrips に送信され、選択された cn を LDAP に対してチェックして、より多くの関連情報を取得します。
ほとんどの名前では、これは問題ありません。ただし、ニックネームを囲む括弧を含む cn が最近追加されました。その名前が選択されると、ldap_search() メソッドは false を返します。以下はコードです。 $employeename はサニタイズされた従業員名です。
...
$dn = "cn=users,dc=our-domain,dc=com";
$filter = "(cn=".$employeename.")";
$attrs = array("cn", "mail");
$rslt = ldap_search($ldapsvr, $dn, $filter, $attrs);
$entries = ldap_get_entries($ldapsvr, $rslt);
...
$filter 文字列は次のようになります
(cn=First (FN) Last)
ここで、First は名、Last は姓、FN は含まれるニックネームです。かっこを \28 および \29 としてエスケープしようとしました (ここで提供されているように、一致するかっこをエスケープする必要はないとも述べています) が、役に立ちませんでした。機能する名前には、文字、スペース、およびピリオド (ミドル イニシャル) が含まれます。
(cn=First \28FN\29 Last)
編集: ldap_search は、死ぬのではなく、false を返しています。調査中に含めた行の 1 つは、$rslt が false で配列でない場合、失敗して終了します。
編集:内側の括弧のみをエスケープしました。アウターは何のトラブルも与えなかったので