使用 LDAP 搜索和 * 似乎可以很好地处理单词,但对于数字似乎不起作用:
我的类的调试输出(自制软件):
Query: Peter is string
Search for cn=Peter
Search for cn=Peter*
Found: 439
Query: 7565 is number
Search for PersonID=7565
Search for PersonID=7565*
Found: 0
Query: 7565025 is number
Search for
Found: 1
有点难以显示代码,因为它是类的集合,但执行搜索的部分使用 for 之后的字符串:
例如(这是捏造的)
ldap_search($connection, $base, "cn=Peter*", array("dn"));
ldap_search($connection, $base, "PersonID=7565", array("dn"));
ldap_search($connection, $base, "PersonID=7565025", array("dn"));
你知道为什么7565*
上的第二个查询没有返回结果,而完整数字的最后一个查询返回结果吗?
谢谢
您可能知道在您的 LDAP 目录上,您有一个架构。众所周知,SCHEMA 提供类(类型)和属性。但实际上在大多数目录中,SCHEMA 为属性提供了另外两个功能:
- 由 OID 给出的属性的语法
- 有效用于匹配属性的匹配规则
例:
attributeType ( 2.5.4.41 NAME 'name'
DESC 'name(s) associated with the object'
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} )
在示例中,匹配规则是 EQUALITY 和 SUBSTR,它们大部分时间都链接到Directory String
语法 (1.3.6.1.4.1.1466.115.121.1.15)。
您可能会遇到以下匹配规则:
EQUALITY
ORDERING
SUBSTR
匹配规则SUBSTR
是编写筛选器时常用(cn=Peter*)
所以我的建议是:看看你的架构中的属性"PersonID","语法/匹配规则"会给你可以应用的过滤器类型