Copy/paste 来自 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 函数。

问题是您正在通过文本媒体传输二进制数据。如果您需要将数据打印在您将要 select 并复制的屏幕上,则无法像那样传输二进制数据。

如果这是在命令行上发生的,您可以以编程方式进行,而不显示实际内容。接受 OS X 的 pbcopypbpaste 命令:

$ php test.php | pbcopy
$ pbpaste | someotherprogram

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

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

你可以把这个字符串放到任何文件中(file_put_contents()),然后打开这个文件,比如throw notepad++。你会在这个文件中看到这些特殊字符。