ldap_explode_dn的奇怪编码结果
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ldap_explode_dn的奇怪编码结果相关的知识,希望对你有一定的参考价值。
用ldap_explode_dn
转换DN字符串后,一些字符(在我的情况下是西里尔字母)被转换为我无法识别的其他编码。
例如ldap_explode_dn('cn=tt,ou=groups,o=ц1,ou=realms,dc=uvf,dc=local', 0);
返回
Array
(
[0] => tt
[1] => groups
[2] => D1861
[3] => realms
[4] => uvf
[5] => local
)
如你所见,ц
角色被转换为D186
。我想这是两字节的UTF-8,但我无法理解我如何解码它。
我尝试了许多方法,如iconv
和mb_convert_encoding
,但没有成功。
我的问题是 - 这个编码是什么以及如何在php中使用它?
答案
我发现this user note on php.net为您的问题提供了解决方案。
编辑:从PHP 5.5开始,对于preg_replace不推荐使用修饰符e,所以这里是一个基于链接用户注释的preg_replace_callback解决方案:
function myldap_explode_dn( $dn, $with_attrib ) {
$result = ldap_explode_dn( $dn, $with_attrib );
//translate hex code into ascii again
foreach ( $result as $key => $value ) {
$result[ $key ] = preg_replace_callback(
"/\([0-9A-Fa-f]{2})/",
function ( $matches) {
return chr( hexdec( $matches[1] ) );
},
$value
);
}
return ( $result );
}
以上是关于ldap_explode_dn的奇怪编码结果的主要内容,如果未能解决你的问题,请参考以下文章
JavaCV升级1.5.6之后遇到h265/hevc编码的视频无法打开编解码器avcodec_open2() error -1:Could not open video codec异常解决办法(代码片
记一个奇怪的编码转换问题,及探讨“错误: 编码GBK的不可映射字符” 的原因