CakeFest 2024: The Official CakePHP Conference

ldap_escape

(PHP 5 >= 5.6.0, PHP 7, PHP 8)

ldap_escapeЭкранирование строки для использования в фильтре LDAP или в DN

Описание

ldap_escape(string $value, string $ignore = "", int $flags = 0): string

Экранирует value для использования в контексте заданном в flags.

Список параметров

value

Значение для экранирования.

ignore

Символы, которые необходимо игнорировать при экранировании.

flags

Контекст, для которого экранируется строка: LDAP_ESCAPE_FILTER для фильтров, используемых в ldap_search() или LDAP_ESCAPE_DN для DN. Если не переданы никакие флаги, то все символы будут экранированы.

Возвращаемые значения

возвращает экранированную строку.

Примеры

При построении фильтра LDAP, вы должны использовать ldap_escape с флагом LDAP_ESCAPE_FILTER.

Пример #1 Поиск по email-адресу

<?php
// $ds допустимый экземпляр LDAP\Connection

// $mail - email-адрес, предоставленный пользователем

$base = "o=My Company, c=US";
$filter = "(mail=".ldap_escape($mail, "", LDAP_ESCAPE_FILTER).")";

$sr = ldap_search($ds, $base, $filter, array("sn", "givenname", "mail"));

$info = ldap_get_entries($ds, $sr);

echo
$info["count"]." записей возвращено\n";
?>

add a note

User Contributed Notes 2 notes

up
1
support at extollit dot com
4 years ago
Suppose you want to reverse the operation, here is a way to "ldap_unescape"

<?php

function ldap_unescape($string) {
return
preg_replace_callback(
"/\\\\[\da-z]{2}/",
function (
$matches) {
$match = array_shift($matches);
return
hex2bin(substr($match, 1));
},
$string
);
}

$result = ldap_unescape("uid=\\61\\6c\\70\\68\\6f\\6e\\7a\\6f,ou=people,dc=foo,dc=com"); // uid=alphonzo,ou=people,dc=foo,dc=com

?>
up
0
martin dot keckeis1 at gmail dot com
8 years ago
You can use it like this for filtering

<?php
$badSearchInput
= 'Domain\username';

$escapedSearchInput = ldap_escape($badSearchInput, null, LDAP_ESCAPE_FILTER);
?>
To Top