在 php 中使用 ldap_modify_batch() 时,“é”变为“ã©”

"é" become "ã©" while using ldap_modify_batch() in php

我正在尝试使用 php 和 ldap_modify_batch() 函数更新我的 Active Directory。 当我调用该函数时,一切正常,但有时,用户会输入一个重音字符。 因此我AD中的编辑字段不包含重音字符(如“é”),但它包含他在其他编码标准中的等价物(如“ã©”)。

这是一个例子:

用户输入-ldap_modify_batch()->结果在我的AD

“兼容性”-ldap_modify_batch()->“兼容性”

这是指定参数的代码

$modifs = [
                    [
                        "attrib" => "telephoneNumber",
                        "modtype" => LDAP_MODIFY_BATCH_REPLACE,
                        "values" => ["0123456789"],
                    ],
                    [
                        "attrib" => "mail",
                        "modtype" => LDAP_MODIFY_BATCH_REPLACE,
                        "values" => ["amail@amail.com"],
                    ],
                    [
                        "attrib" => "description",
                        "modtype" => LDAP_MODIFY_BATCH_REPLACE,
                        "values" => ["Comptabilité"],
                    ],
                    [
                        "attrib" => "physicalDeliveryOfficeName",
                        "modtype" => LDAP_MODIFY_BATCH_REPLACE,
                        "values" => ["AOfficName"],
                    ],
                ];
                ldap_modify_batch($connect, $dn, $modifs);

我应该怎么做才能在我的广告中加入口音?

我的 php.ini 或其他地方有什么我应该改变的吗?

所以,这是我们创建的解决方案:

您必须使用“ISO-8859-1”而不是“UTF-8”对您的字符串进行编码 (我不知道为什么)。

要对您的字符串进行编码,您必须使用 php 函数 iconv()

  1. 第一个参数是你的原始字符串的类型 (如果您不知道您的原始编码类型是什么,您可以使用 mb_detect_encoding() 来获取它。)
  2. 第二个参数必须是“ISO-8859-1”
  3. 最后一个参数是您要转换的字符串。

这是我解决问题的方法:

$office = "Comptabilité";
$value_ready_to_send = iconv(mb_detect_encoding($office),"ISO-8859-1",$office);