Php ldap utf 8

Иностранные символы и LDAP. Какую кодировку / кодировку ожидает LDAP?

Я анализирую XML, с simplexml_load_string() и использование данных в нем для обновления объектов Active Directory (AD) через LDAP.

  Bìlbö Bággįnš Gãńdåłf Thê Gręât Śām Wīšë  

Я в первую очередь запускаю ldap_search() найти одного пользователя, а затем приступить к изменению его атрибутов. Закачка вышеуказанных значений прямо в AD с использованием LDAP приведет к появлению некоторых изуродованных символов.

Я пробовал следующие функции, но безрезультатно:

utf8_encode($str); utf8_decode($str); iconv("UTF-8", "ISO-8859-1//TRANSLIT", $str); iconv("UTF-8", "ASCII//TRANSLIT", $str); iconv("UTF-8", "T.61", $str); 

В идеале я не хочу делать ни одно из этих преобразований строк. UTF-8 должно быть хорошо, правда?!

Я также заметил следующее: я распечатал значения, чтобы увидеть, как они получаются. скручивание скрипта в CLI покажет правильные символы, но веб-браузеры показывают то же, что и AD.

В чем дело? Должен ли я смотреть на что-то еще, например. Кодировка URL? Я надеюсь, что это просто ошибка с моей стороны.

РЕДАКТИРОВАТЬ: я ввел в эти символы с помощью интерфейса администратора AD, чтобы посмотреть, как они будут выходить. Я могу читать их через LDAP нормально. Правильные символы отображаются в браузере. скручивание через CLI будет показывать вопросительные знаки вместо иностранных символов. Передача одного из этих возвращаемых значений в mb_detect_encoding() вернет UTF-8.

Я решил немедленно изменить тот же объект, не записывая новую строку, а просто переворачивая существующее значение и сохраняя объект. Это прекрасно работает — я вижу правильное значение (обратное) в AD.

  • Разработка на Mac OS X 10.7 Lion — PHP 5.4.3
  • Запуск производства на: Red Hat 6 — PHP 5.4.3
  • AD сервер: Windows 2003

ОБНОВЛЕНИЕ: Через несколько месяцев я не смог найти ответ / решение этой проблемы. В конце концов, я пошел с заменой символов на их не акцентированный эквивалент (я знаю, НЕ идеал).

Источник

Php ldap utf 8

Если у вас не работает один из способов авторизации, сконвертируйте свой аккаунт по ссылке

Авторизуясь в LiveJournal с помощью стороннего сервиса вы принимаете условия Пользовательского соглашения LiveJournal

В PHP требуется только модуль php_ldap.dll, поcмотрите, он входит в состав полной версии PHP.
Поключаете его в php.ini и далее можете пользоваться ldap-функциями. Привожу простой пример, с которого я сам начал:

 // Работа с Active Directory // Изменение кодировки из UTF-8 в Windows-1251 function utf2win( $mes ) return mb_convert_encoding($mes, "WINDOWS-1251", "UTF-8"); >; // Получение пользователей из Active Directory function get_AD_users()  $ldap_user = "Administrator"; // username  $ldap_pass = "пароль_админа"; // associated password  $domain_name = "mydomain.com"; // Имя домена  $domain1 = "mydomain";  $domain2 = "com"; // Служебные пользователи, которых не надо показывать  $ignore_list = array("Guest","IWAM_SERVER","IUSR_SERVER","USER1CV8SERVER","Administrator"); // Connect to LDAP server  $ldap_con = ldap_connect($domain_name)  or die("Could not connect to LDAP server."); // Fix for Windows 2003 AD  ldap_set_option($ldap_con, LDAP_OPT_PROTOCOL_VERSION, 3);  ldap_set_option($ldap_con, LDAP_OPT_REFERRALS, 0); // binding to LDAP server  $ldapbind = ldap_bind($ldap_con, $ldap_user, $ldap_pass)  or die("LDAP bind failed. ");  $base_dn = "DC=$domain1, DC=$domain2";  $filter = "(&(objectClass=user)(objectCategory=person)(|(name=*)(displayname=*)(cn=*)))";  $search=ldap_search($ldap_con, $base_dn, $filter);  $number_returned = ldap_count_entries($ldap_con,$search); // Количество пользователей  $info = ldap_get_entries($ldap_con, $search); // Результирующий массив с пользователями из AD  $users = array(); for ($i=0; $i$info["count"]; $i++)   $user = array();  $user["login"] = utf2win($info[$i]["samaccountname"][0]);  $user["fio"] = utf2win($info[$i]["name"][0]);  $tmp = explode(" ",$user["fio"]);  $user["last"] = trim($tmp[0]); // Фамилия  $user["first"] = @trim($tmp[1]); // Имя  $user["second"] = @trim($tmp[2]); // Отчество if(!in_array($user["login"],$ignore_list))  $users[$user["login"]] = $user; >; > return $users; >; ?> 

Спасиба я разобрался как AD пролистать на C#, вот искал на PHP видимо нашел

using System;
using System.DirectoryServices;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
class Program
private static DirectorySearcher searcher;
private static SearchResultCollection resultA;

[STAThread]
static void Main(string[] args)
try
searcher = new DirectorySearcher(new DirectoryEntry(«LDAP://ххх.ххх.х.х»));

foreach (SearchResult result in resultA)
foreach (string key in result.Properties.PropertyNames)
Console.WriteLine(key + » \t» + cl);
>
>
>

>
catch (Exception ex)
Console.Write(«Error 0x01: «+ex.Message);
Console.ReadLine();
return;
>
Console.WriteLine(«Programm finished. «);
Console.ReadLine();
>
>
>

Источник

Читайте также:  border-style
Оцените статью