PHP Conference Japan 2024

ldap_escape

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

ldap_escape將字串跳脫以用於 LDAP 篩選器或 DN

描述

ldap_escape(字串 $value, 字串 $ignore = "", 整數 $flags = 0): 字串

跳脫 value 以在 flags 暗示的上下文中使用。

參數

value

要跳脫的值。

ignore

跳脫時要忽略的字元。

flags

跳脫字串的使用情境:LDAP_ESCAPE_FILTER 用於 ldap_search() 函數的過濾條件,或 LDAP_ESCAPE_DN 用於 DN。如果沒有傳遞任何旗標,則所有字元都會被跳脫。

返回值

返回跳脫後的字串。

範例

建構 LDAP 過濾條件時,應使用 ldap_escape 並搭配 LDAP_ESCAPE_FILTER 旗標。

範例 #1 搜尋電子郵件地址

<?php
// $ds 是一個有效的 LDAP\Connection 實例,用於連接目錄伺服器

// $mail 是使用者在表單中提供的電子郵件地址

$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";
?>

新增註記

使用者貢獻的註記 2 則註記

support at extollit dot com
4 年前
如果您想反轉此操作,以下是一種「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

?>
martin dot keckeis1 at gmail dot com
9 年前
您可以像這樣使用它來進行過濾

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

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