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

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

Пример XML (упрощенный):

<?xml version="1.0" encoding="UTF-8"?>
<users>
    <user>Bìlbö Bággįnš</user>
    <user>Gãńdåłf Thê Gręât</user>
    <user>Śām Wīšë</user>
</users>

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

Например: Bìlbö BággįnÅ¡

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

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

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

6
задан OmidTahouri 12 September 2012 в 13:48
поделиться