OpenLDAP выводит некоторые странные данные, которые json_encode() не может обработать

Я добавил этот плагин LoginLdap в piwik, и хотя он отлично работает на других машинах без каких-либо проблем, на моем Debian Box он не работает.

Соединение с сервером LDAP работает, но как только я пытаюсь войти через пользователя LDAP, я получаю сообщение об ошибке:

Предупреждение: json_encode(): неверная последовательность UTF-8 в аргументе в /var/www/plugins/LoginLdap/GigatecLdap.php в строке 44

Я сделал var_dump() для $result в строке 43 и увидел, что OpenLDAP, похоже, возвращает некоторые странные символы из AD, которые json_encode просто не может обработать.

Вы можете увидеть источники здесь.

1 ответ

Решение

Вам необходимо выяснить, в каком наборе символов хранятся записи на сервере LDAP. Возможно, вам повезет, используя mb_detect_encoding за это. Надеемся, что это вернет имя набора символов, в этом случае вы можете сделать следующее:

$utf8String = iconv(mb_detect_encoding($string), 'utf8', $string);

В том случае, если mb_detect_encoding возвращается false - т.е. кодировка неизвестна - вы можете попробовать ее самостоятельно (утомительно, но полезно). Найдите строку, содержащую известный символ, который вызывает проблемы. Разработайте байтовое представление строки следующим образом:

$bytes = unpack('H*', $string);

Затем найдите свой символ в FileFormat и посмотрите на поддержку charset / codepage для этого символа, сопоставляя байты с соответствующими байтами сверху. Затем вы сможете использовать это имя набора символов в качестве первого параметра iconv,

Другие вопросы по тегам