以gzdeflate()
的输出为例:
$a = gzdeflate('..........');
echo $a . "'n" . strlen($a);
得到如下输出:
?Ӄ
5
所以我得到了一个5字节的字符串,其中包含不能正确输出的字符,因此不能复制和粘贴。
显然,echo gzinflate('?Ӄ');
不起作用,但echo gzinflate($a)
起作用。
是否有任何方法可以获得$a
的实际内容到我的剪贴板上,或者以这样一种方式输出它,我可以复制并粘贴到gzinflate()
中以检索原始字符串?我找到的唯一的解决方法是:
$a = base64_encode(gzdeflate('..........'));
echo $a;
这给了我:
09ODAQA=
这是足够友好的echo gzinflate(base64_decode('09ODAQA='));
和获得..........
,但我想跳过base64函数如果可能的话。
问题是您正在通过文本媒介传输二进制数据。如果您需要将数据打印到您的屏幕上,然后选择并复制它,则无法像这样传输二进制数据。
如果这发生在命令行上,您可以以编程方式执行,而不显示实际内容。以OS X的pbcopy
和pbpaste
为例:
$ php test.php | pbcopy
$ pbpaste | someotherprogram
如果您确实需要可见的文本表示,则需要确保输出是ascii安全的(或至少是"Unicode安全的"),而不是原始二进制数据。为此,您需要对二进制数据进行64进制或十六进制编码。
我猜你的浏览器或控制台只是吃了一些特殊的字符,如换行符和其他。
您可以将此字符串放入任何文件(file_put_contents()),并打开该文件,例如使用notepad++。您将在这个文件中看到这些特殊字符