を使用して XML を解析しsimplexml_load_string()
、その中のデータを使用して LDAP 経由で Active Directory (AD) オブジェクトを更新しています。
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()
て 1 人のユーザーを見つけてから、その属性の変更に進みます。LDAP を使用して上記の値を直接 AD に送り込むと、かなり壊れた文字が表示されます。
例えば: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 でスクリプトをカールすると正しい文字が表示されますが、Web ブラウザでは AD と同じように表示されます。
どうしたの?私は何か他のものを見ているべきですか?URLエンコーディング? これが私の側の単純な間違いにかかっていることを願っています。
編集:
AD 管理 GUI を使用してこれらの文字を入力し、どのように表示されるかを確認しました。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
- 広告サーバー: Windows 2003
更新: 数か月後、この問題に対する答え/解決策を見つけることができませんでした。最後に、文字をアクセントのない同等のものに置き換えました(理想的ではありませんが、私は知っています)。