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
,