【问题标题】:"é" become "ã©" while using ldap_modify_batch() in php在 php 中使用 ldap_modify_batch() 时“é”变成“ã©”
【发布时间】:2021-06-30 10:45:08
【问题描述】:

我正在尝试使用 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 或其他地方有什么我应该改变的吗?

【问题讨论】:

  • 您需要确保始终使用一致的文本编码,或者根据需要有意将一种编码转换为另一种编码。更多:joelonsoftware.com/articles/Unicode.html 你所描述的看起来像是 UTF8 被渲染为 ISO-8859-1 的经典示例。
  • 感谢您的回复,我的输入已经是 UTF-8,但似乎这个函数 (ldap_modify_batch()) 正在将我的输入编码为 ISO-8859- 1、你觉得有可能吗?
  • 好像可以,不过不知道,没用过。如果是这样,您需要告诉它使用 UTF8(如果可能),或者将文本从 UTF8 转换为它使用的任何内容(ISO-8859-1 或其他)。
  • 我找到了解决方案,(但我不知道如何将主题标记为已解决)。所以我在输入中添加了对 ISO-8859-1 格式的转换。
  • 发布您的解决方案作为答案并解释其工作原理。然后,几天后,您可以接受该答案。很高兴你知道了!

标签: php active-directory character-encoding ldap


【解决方案1】:

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

您必须将字符串编码为“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);

【讨论】:

    猜你喜欢
    • 2017-01-10
    • 2013-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-07
    • 2013-03-25
    • 2014-07-25
    相关资源
    最近更新 更多