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

时间:2016-08-10 07:21:04

标签: php multibyte

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功能。

2 个答案:

答案 0 :(得分:3)

问题在于您通过文本媒体传输二进制数据。如果您需要在屏幕上打印出要在其中选择和复制数据的数据,则无法传输这样的二进制数据。

如果在命令行中发生这种情况,可以以编程方式执行此操作而不显示实际内容。使用OS X的sqlcmd -S <ServerName> -U <LoginUser> -P <Password> -d <DatabaseName> -i <Inputfilenamewithpath> -o <Outputfilenamewithpath> pbcopy命令:

pbpaste

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

答案 1 :(得分:0)

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

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