我将使用simplexml_load_string()解析XML,并使用其中的数据通过LDAP更新Active Directory(AD)对象。
示例XML(简化版):
我首先运行了一个
例如:
理想情况下,我不想进行任何这些字符串转换。UTF-8应该没问题,对吧?!
我还注意到以下情况: 我已经打印出值来查看它们的输出情况。在CLI中curl脚本将显示正确的字符,但是Web浏览器显示与AD相同。
发生了什么?我应该看一些其他内容,例如URL编码吗? 我希望这只是我的一个简单错误。
编辑: 我使用AD admin GUI输入了这些字符,以查看它们的输出情况。我可以通过LDAP正确地读取它们。当在浏览器中时,显示正确的字符。通过CLI curling将显示问号而不是外国字符。将其中一个返回值传递给mb_detect_encoding()将返回UTF-8。 我决定立即通过不写入新字符串,而只是反转现有值并保存对象来修改同一对象。这很好用——我在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()
来找到单个用户,然后继续更改他们的属性。直接将上述值使用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中curl脚本将显示正确的字符,但是Web浏览器显示与AD相同。
发生了什么?我应该看一些其他内容,例如URL编码吗? 我希望这只是我的一个简单错误。
编辑: 我使用AD admin GUI输入了这些字符,以查看它们的输出情况。我可以通过LDAP正确地读取它们。当在浏览器中时,显示正确的字符。通过CLI curling将显示问号而不是外国字符。将其中一个返回值传递给mb_detect_encoding()将返回UTF-8。 我决定立即通过不写入新字符串,而只是反转现有值并保存对象来修改同一对象。这很好用——我在AD中看到了正确的值(反转)。
- 在 Mac OS X 10.7 Lion 上开发 - PHP 5.4.3
- 在 Red Hat 6 上运行生产环境 - PHP 5.4.3
- AD 服务器:Windows 2003
更新: 几个月后,我无法找到这个问题的答案/解决方案。 最终,我选择将字符替换为它们的非重音等效字符(并不理想,我知道)。
bin2hex()
函数之一来显示二进制字符串值。 - decezebin2hex( á ) == c3a1
。我不确定字符在复制和粘贴到各个地方时是否会发生任何变化。系统剪贴板可能会损坏/更改它(?)。 - OmidTahouriWINDOWS-1250
编码,因为来自Microsoft的任何东西都是如此... 因此,iconv("UTF-8", "WINDOWS-1250", $str);
应该可以工作。 - shadyyxiconv():在输入字符串中检测到非法字符
- OmidTahouri