从gzdeflate复制/粘贴多字节字符串


Copy/paste multibyte string from gzdeflate?

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的pbcopypbpaste为例:

$ php test.php | pbcopy
$ pbpaste | someotherprogram

如果您确实需要可见的文本表示,则需要确保输出是ascii安全的(或至少是"Unicode安全的"),而不是原始二进制数据。为此,您需要对二进制数据进行64进制或十六进制编码。

我猜你的浏览器或控制台只是吃了一些特殊的字符,如换行符和其他。

您可以将此字符串放入任何文件(file_put_contents()),并打开该文件,例如使用notepad++。您将在这个文件中看到这些特殊字符