[ 編輯者註:此段錯誤已修復,在 PHP 4.3.4 或 PHP 5.0.0 發佈時將不會發生。然而,如下文所述,逸出特殊字元仍然很重要。]
如果您的 DN 包含 < 或 > 字元,您必須使用反斜線逸出它們,否則 ldap_explode_dn() 將會給您「參數計數錯誤」或是甚至產生區段錯誤。
舉例來說,以下呼叫會失敗,並出現「參數計數錯誤」或是區段錯誤
ldap_explode_dn( "cn=<bob>,dc=example,dc=com", 0 );
ldap_explode_dn( 'cn=<bob>,dc=example,dc=com', 0 );
但這樣會成功
ldap_explode_dn( "cn=\<bob\>,dc=example,dc=com", 0 );
另請注意,< 和 > 會如上述使用十六進制代碼逸出。這個函式是一個不錯的包裝器,可以正確格式化所有 DN,並且可以安全地使用 < 和 > 字元以及 UTF-8 字元呼叫。
function my_explode_dn( $dn, $with_attributes=0 )
{
$dn = addcslashes( $dn, "<>" );
$result = ldap_explode_dn( $dn, $with_attributes );
//將十六進位碼再次翻譯為 ascii
foreach( $result as $key => $value )
$result[$key] = preg_replace("/\\\([0-9A-Fa-f]{2})/e", "''.chr(hexdec('\\1')).''", $value);
return $result;
}
我正在使用 php 4.3.1。祝您好運!