在我正在处理的 php 页面中,建立了一个 LDAP 连接,从中提取 cn 条目列表并将其放入下拉列表中。下拉列表中的选择通过表单提交发送到另一个 php 脚本,该脚本根据 LDAP 检查选定的 cn 以获取更多相关信息。
对于大多数名称来说,这没有问题;however, a cn was recently added that includes parentheses enclosing a nickname, and when that name is selected it causes the ldap_search() method to return 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 返回错误,而不是死亡。如果 $rslt 为假而不是数组,我在调查时包含的其中一条线将失败并死亡。
编辑:我只转义了内括号,。因为外部从来没有给过任何麻烦