我有一个使用openssl base 64生成的.txt文件,假设该文件的内容是:
HIK + W9hsOweQdOYx0ngYn + O54lXiDjZvDdzjtBwTI / uhPKF5egIIXnau3535G3wOyZnsI6F3YgokDfc9m6O3UM7MBMqgG5TEqtPdCzSbFq9VUPdJSmznNVQCI207OMku9NNLgehkh / jK2eITpPuh97EQuCW / aJjl0quM07bhWiI =
全部在一行中,但即使我从记事本复制并将其粘贴在此处,它也会粘贴为3行:
HIK + W9hsOweQdOYx0ngYn + O54lXiDjZvDdzjtBwTI / uhPKF5egIIXnau3535G3wO yZnsI6F3YgokDfc9m6O3UM7MBMqgG5TEqtPdCzSbFq9VUPdJSmznNVQCI207OMku 9NNLgehkh / jK2eITpPuh97EQuCW / aJjl0quM07bhWiI =
我一直试图通过separing来欺骗字符串,但无论我尝试它只是不起作用,我已经尝试了下一个:
$handle = fopen($file, "r");
$str = "";
while($line = fgets($handle)){
echo $line; <--here i get 3 strings separated by a space characters
$str = $str.$line;
fclose($handle);
echo $str; <--- same 3 strings separated by a space
die;
然后尝试了:
$handle = fopen($file, "r");
$str2 = "";
$str = fread($handle, filesize($file)); <-same result
fclose($handle);
echo substr($str,0,64);
echo substr($str,64,64);
echo substr($str,128); <-same result
$str2 = substr($str,0,64).substr($str,64,64).substr($str,128); <-same result
我实际上是第一次尝试这个,因为这应该是获取文件内容的最简单方法:
$str = file_get_contents($file);
$str = str_replace(' ', '', $str);
echo $str; <- same result
试图替换''by'',它不起作用,让我相信即使.txt文件中只有一个字符串,不知何故base64编码使这些字符串特殊而且最糟糕的是,php知道它并且不能忽略它,但我需要它是1个单一的字符串,任何人都知道发生了什么并且解释它的想法?如何在没有每64个字符的空格的情况下获得1个字符串?这让我发疯了。
答案 0 :(得分:1)
来自http://wiki.openssl.org/index.php/Command_Line_Utilities的base64部分:
“警告base64行长度默认限制为76个字符 openssl(并生成64个字符/行)...能够 解码base64行,不使用超过76个字符的换行符 - 选项:“
这意味着你的命令:
openssl base64 -in $ bin -out $ file
会自动将输出分解为64个字符行
如果您希望输出在一行中,请使用-A选项:
openssl base64 -A-in $ bin -out $ file
这将使您的输出全部为1个大字符串
使用file_get_contents()将其读入您的php脚本可以获得理想的结果。
这个维基页面确实对-A选项说了这个:
“... - 一个选项是BUGGY(限制长文件)。”
虽然没有显示“长文件”的长度。
如果您想坚持使用原始的openssl命令:
openssl base64 -in $ bin -out $ file
然后尝试将其全部变成一个字符串:
$str = file_get_contents($file);
$str = str_replace("\n", "", $str);
echo $str;