note 109482 modified in function.ldap-explode-dn by yannick

From: Date: Mon, 23 Jul 2012 06:21:19 +0000
Subject: note 109482 modified in function.ldap-explode-dn by yannick
References: 1  Groups: php.notes 
Request: Send a blank email to php-notes+get-189363@lists.php.net to get a copy of this message
I came accros this page and enjoyed the comments. 

Since a LDAP string can sometimes be lengthy and have many attributes, I needed to be able to sort through all that is in.

In my case, I needed to get the subdomain part and other parameters. 

Here is how I built my method.
<?php
 /**
 * Parse, and format a DN string to Array
 *
 * Read a LDAP DN, and return an array keys
 * listing all similar attributes.
 *
 * Also takes care of the character escape and unescape
 *
 * Example:
 * CN=username,OU=UNITNAME,OU=Region,OU=Country,DC=subdomain,DC=domain,DC=com
 *
 * Would normally return:
 * Array (
 * [count] => 9
 * [0] => CN=username
 * [1] => OU=UNITNAME
 * [2] => OU=Region
 * [5] => OU=Country
 * [6] => DC=subdomain
 * [7] => DC=domain
 * [8] => DC=com
 * )
 *
 * Returns instead a manageable array:
 * array (
 * [CN] => array( username )
 * [OU] => array( UNITNAME, Region, Country )
 * [DC] => array ( subdomain, domain, com )
 * )
 *
 *
 * @author gabriel at hrz dot uni-marburg dot de 05-Aug-2003 02:27 (part of the character replacement)
 * @author Renoir Boulanger
 * 
 * @param string $dn The DN
 * @return array
 */
 function parseLdapDn($dn)
 {
 $parsr=ldap_explode_dn($dn, 0);
 //$parsr[] = 'EE=Sôme Krazï string';
 //$parsr[] = 'AndBogusOne';
 $out = array();
 foreach($parsr as $key=>$value){
 if(FALSE !== strstr($value, '=')){
 list($prefix,$data) = explode("=",$value);
 $data=preg_replace("/\\\\\\([0-9A-Fa-f]{2})/e", "''.chr(hexdec('\\\\1')).''", $data);
 if(isset($current_prefix) && $prefix == $current_prefix){
 $out[$prefix][] = $data;
 } else {
 $current_prefix = $prefix;
 $out[$prefix][] = $data;
 }
 }
 }
 return $out;
 }
?> --was-- I came accros this page and enjoyed the comments. Since a LDAP string can sometimes be lengthy and have many attributes, I needed to be able to sort through all that is in. In my case, I needed to get the subdomain part and other parameters. Here is how I built my method. /** * Parse, and format a DN string to Array * * Read a LDAP DN, and return an array keys * listing all similar attributes. * * Also takes care of the character escape and unescape * * Example: * CN=username,OU=UNITNAME,OU=Region,OU=Country,DC=subdomain,DC=domain,DC=com * * Would normally return: * Array ( * [count] => 9 * [0] => CN=username * [1] => OU=UNITNAME * [2] => OU=Region * [5] => OU=Country * [6] => DC=subdomain * [7] => DC=domain * [8] => DC=com * ) * * Returns instead a manageable array: * array ( * [CN] => array( username ) * [OU] => array( UNITNAME, Region, Country ) * [DC] => array ( subdomain, domain, com ) * ) * * * @author gabriel at hrz dot uni-marburg dot de 05-Aug-2003 02:27 (part of the character replacement) * @author Renoir Boulanger * * @param string $dn The DN * @return array */ function parseLdapDn($dn) { $parsr=ldap_explode_dn($dn, 0); //$parsr[] = 'EE=Sôme Krazï string'; //$parsr[] = 'AndBogusOne'; $out = array(); foreach($parsr as $key=>$value){ if(FALSE !== strstr($value, '=')){ list($prefix,$data) = explode("=",$value); $data=preg_replace("/\\\([0-9A-Fa-f]{2})/e", "''.chr(hexdec('\\1')).''", $data); if(isset($current_prefix) && $prefix == $current_prefix){ $out[$prefix][] = $data; } else { $current_prefix = $prefix; $out[$prefix][] = $data; } } } return $out; } http://php.net/manual/en/function.ldap-explode-dn.php

« previous php.notes (#189363) next »