嗨,我正在尝试验证一些用户输入,但我不确定正确的方法是什么。
我想验证用户创建表单的名字和姓氏字段。我正在使用带有Zend框架的PHP,所以我将编写一个验证器。在做了一些研究之后,我认为我真的应该允许所有 UTF8 字符,开头或结尾没有空格。我不确定正则表达式,但我稍后可以找到,我很可能会使用 php 的preg_match。
我将这些详细信息存储在OpenLDAP中,使用sn字段表示姓氏,使用给定名称表示名字。我应该如何限制名称?OpenLDAP 中的长度是否有限制,我需要检查它接受的字符还是接受所有字符?
我甚至应该验证名字和姓氏,还是应该让用户输入他们想要的内容?
我正在使用一个单独的用户名字段,该字段将由"text.text"组成,文本是 A-Za-z 字符。
我不是在发布代码,因为我只是需要一些指导,不确定这里的最佳实践是什么。
验证名称是个坏主意。对于名称中允许的内容没有通用规则,尤其是当您也想允许非西方文本时。
这对于 LDAP 来说是一个挑战,因为不能保证目录能够理解用户输入的字符集。不过,有一个简单的解决方案:在将值存储在LDAP中之前base64_encode()
这些值,并在输出时base64_decode()
它们。
无需验证名称。目录服务器架构指定所有属性的语法,包括 givenName
和 sn
。服务器将对显示的任何名称进行正确编码。如果 DirectoryString
值以空格开头或结尾,服务器将对值进行 base64 编码以进行存储。
尽管存在实际限制,但 LDAP 客户端不应假定服务器能够强制实施属性值的非零长度。某些属性语法被定义为长度不为零(例如 DirectoryString
),但没有定义上限,因此,客户端不应假定服务器强制实施上限。
参见
- LDAP:语法和匹配规则