1

このLoginLdap プラグインを piwik に追加しましたが、他のマシンでは問題なく完全に動作していますが、私の debian ボックスでは動作しません。

LDAP サーバーへの接続は機能しますが、LDAP ユーザー経由でログインしようとするとすぐにエラーが発生します。

警告: json_encode(): 44 行目の /var/www/plugins/LoginLdap/GigatecLdap.php の引数に無効な UTF-8 シーケンスがあります

43 行目の $result で var_dump() を実行したところ、OpenLDAP が AD から奇妙な文字を返しているようで、json_encode では処理できないことがわかりました。

ここでソースを見ることができます

4

1 に答える 1

2

エントリが LDAP サーバーに格納されている文字セットを確認する必要があります。これを使用すると、運が良いかもしれませんmb_detect_encoding。うまくいけば、これは文字セットの名前を返します。その場合、次のことができます:

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

mb_detect_encodingが返された場合、falseつまりエンコーディングが不明な場合は、自分で解決してみることができます (面倒ですが、やりがいがあります)。問題の原因となっている既知の文字を含む文字列を見つけます。文字列のバイト表現を次のように計算します。

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

次に、FileFormatで文字を検索し、その文字の文字セット/コードページのサポートを調べて、バイトを上記の対応するバイトと一致させます。その後、その文字セット名を の最初のパラメータとして使用できるようになりますiconv

于 2012-10-04T12:12:05.130 に答える