Php base64_encode()中的差异

Php base64_encode()中的差异,php,windows,active-directory,Php,Windows,Active Directory,我正在尝试编写一个PHP脚本,它接收一个csv文件,然后创建一个LDIFDE文件,用于将学生导入AD 除了密码,我什么都能用 问题似乎出在PHP中的base64_encode()上 我找不到“密码1”之间的区别。有人知道我做错了什么吗?一旦我可以得到我的初始和编码的$password来匹配编码的$testPass,我就应该能够让它正常工作 我将您的两个base64编码字符串称为“短字符串”和“长字符串” 长字符串似乎是编码为UTF16 Little Endian(或UCS-2LE)的短字符串。查

我正在尝试编写一个PHP脚本,它接收一个csv文件,然后创建一个LDIFDE文件,用于将学生导入AD

除了密码,我什么都能用

问题似乎出在PHP中的base64_encode()上


我找不到“密码1”之间的区别。有人知道我做错了什么吗?一旦我可以得到我的初始和编码的$password来匹配编码的$testPass,我就应该能够让它正常工作

我将您的两个base64编码字符串称为“短字符串”和“长字符串”

长字符串似乎是编码为UTF16 Little Endian(或UCS-2LE)的短字符串。查看此长字符串解码的十六进制转储:

          00 01 02 03 04 05 06 07 - 08 09 0A 0B 0C 0D 0E 0F  0123456789ABCDEF

00000000  22 00 50 00 61 00 73 00 - 73 00 77 00 6F 00 72 00  ".P.a.s.s.w.o.r.
00000010  64 00 31 00 22 00                                  d.1.".
如您所见,每个有效的ASCII字节后面都有一个空字节,这就是您的差异所在。问题是,你想要长字符串还是短字符串?不管是哪种方式,请查看PHP手册,了解您要去的地方

长字符串的编码为“UCS-2LE”;短字符串的编码类似于“ISO-8859-1”或“cp1252”。根据您试图生成的参数,将这些参数放入“from”和“to”参数中

编辑-必需的调用 我在评论中发表了这篇文章,但为了便于参考,我将其包括在这里。要获取长字符串,请使用'UCS-2LE'作为第二个参数调用
mb\u convert\u encoding()
。例如:

$password = '"Password1"';
echo base64_encode(mb_convert_encoding($password, 'UCS-2LE'));
产生:

IgBQAGEAcwBzAHcAbwByAGQAMQAiAA==

我刚刚做了一个var_转储,得到了以下结果字符串“Password1”(长度=11)string”�P�A.�s�s�W�o�R�D�1.�"�' (长度=22)我不知道该怎么看� 是。在源代码中,它们以�;顺便说一句,请尝试执行
echo'chr'.ord($testpass[1]);
并告诉我结果…字符串是UCS-2LE/UTF-16 Little-Endian。发布了一个关于如何转换为或从中转换的答案,以正确的为准。我想要一个长字符串,来自我找到的文档。让我研究一下,然后再回复给你。谢谢!如果你想要长字符串,那么你需要做类似于t的事情他的:
$some_string=base64_encode(mb_convert_encodeing($original_string,'UCS-2LE'));
EDIT:ConfirmedPerfect。就是这样,mb_convert_encodeing()成功了。非常感谢!
$password = '"Password1"';
echo base64_encode(mb_convert_encoding($password, 'UCS-2LE'));
IgBQAGEAcwBzAHcAbwByAGQAMQAiAA==