Скопировать / вставить многобайтовую строку из 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, если это возможно.

1

Решение

Проблема в том, что вы передаете двоичные данные через текстовый носитель. Если вам требуется распечатать данные на экране, где вы их выберете и скопируете, то нет способа транспортировать двоичные данные подобным образом.

Если это происходит в командной строке, вы мог делать это программно, не отображая фактическое содержание. Взять OS X pbcopy а также pbpaste команды:

$ php test.php | pbcopy
$ pbpaste | someotherprogram

Если вам требуется видимое текстовое представление, Вы должны убедиться, что вывод является ASCII-безопасным (или, по крайней мере, «Unicode safe»), а не необработанными двоичными данными. Для этого вам нужно будет использовать кодировку 64 или шестнадцатеричное кодирование ваших двоичных данных.

3

Другие решения

Я думаю, ваш браузер или консоль просто есть некоторые специальные символы, такие как разрыв строки и другие.

Вы можете поместить эту строку в любой файл (file_put_contents ()) и открыть этот файл, например, с помощью notepad ++. и вы увидите эти специальные символы в этом файле.

0

По вопросам рекламы [email protected]