6

を使用して 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

更新: 数か月後、この問題に対する答え/解決策を見つけることができませんでした。最後に、文字をアクセントのない同等のものに置き換えました(理想的ではありませんが、私は知っています)。

4

4 に答える 4

8

LDAP v3 を使用していますか?

ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);

LDAPv3 はデフォルトで UTF-8 をサポートしており、要求と応答がデフォルトで含まれていると想定されています。ここを参照してください: http://technet.microsoft.com/en-us/library/cc961766.aspx

于 2012-06-14T17:45:26.183 に答える
1

これに出くわした人のために言及するもう1つのこと:

テキストがすでに UTF-8 である場合は、再エンコードしないでください。utf8_encodeのドキュメント ページにある次の注意事項に注意してください。すでにエンコードされた文字列を再エンコードすると、文字化けが発生します。さらに、この関数では、ある特定のエンコーディングから別のエンコーディングのみが許可されます。

次のようにして、文字列を UTF-8 でエンコードする必要があるかどうかを簡単にテストできます。

if (!preg_match('//u', $value)) {
    // do your encoding process...
}

Web ページでも文字が正しく表示されないが、CLI では文字については、ヘッダーに正しい文字セットを設定していることを確認してください。

header('Content-type: text/html; charset=utf-8');

于 2016-08-24T14:36:23.333 に答える