Reverses the conversion done by {@link escapeFilterValue()}.
Converts any sequences of a backslash followed by two hex digits into
the corresponding character.
public static unescapeFilterValue ( array $values = [] ) : array | ||
$values | array | Values to unescape. |
Résultat | array | Unescaped values. |
/** * Test unescaping of filter values. */ public function testUnescapeFilterValue() { $expected = 't(e,s)t*v\\al' . chr(30) . 'ue'; $filterval = 't\\28e,s\\29t\\2av\\5cal\\1eue'; // String call $this->assertEquals(array($expected), Horde_Ldap_Util::unescapeFilterValue($filterval)); // Array call. $this->assertEquals(array($expected), Horde_Ldap_Util::unescapeFilterValue(array($filterval))); // Multiple arrays. $this->assertEquals(array($expected, $expected, $expected), Horde_Ldap_Util::unescapeFilterValue(array($filterval, $filterval, $filterval))); }
/** * Parse LDAP filter. * Partially derived from Net_LDAP_Filter. * * @param string $filter The filter string. * * @return array An array of the parsed filter. * * @throws Horde_Kolab_Server_Exception If parsing the filter expression * fails. */ public function parse($filter) { $result = array(); if (preg_match('/^\\((.+?)\\)$/', $filter, $matches)) { if (in_array(substr($matches[1], 0, 1), array('!', '|', '&'))) { $result['op'] = substr($matches[1], 0, 1); $result['sub'] = $this->parseSub(substr($matches[1], 1)); return $result; } else { if (stristr($matches[1], ')(')) { throw new Horde_Kolab_Server_Exception('Filter parsing error: invalid filter syntax - multiple leaf components detected!'); } else { $filter_parts = preg_split('/(?<!\\\\)(=|=~|>|<|>=|<=)/', $matches[1], 2, PREG_SPLIT_DELIM_CAPTURE); if (count($filter_parts) != 3) { throw new Horde_Kolab_Server_Exception('Filter parsing error: invalid filter syntax - unknown matching rule used'); } else { $result['att'] = $filter_parts[0]; $result['log'] = $filter_parts[1]; $val = Horde_Ldap_Util::unescapeFilterValue($filter_parts[2]); $result['val'] = $val[0]; return $result; } } } } else { throw new Horde_Kolab_Server_Exception(sprintf("Filter parsing error: %s - filter components must be enclosed in round brackets", $filter)); } }