我从PUSH服务接收数据。此数据使用gzcompress()压缩。在数据的最开始,它包含一个int,它是所包含数据的长度。这是在gzcompress()之后完成的;所以样本数据将是:
187xœËHÍÉÉ,
由
生成echo '187'.gzcompress('Hello');
现在,我不知道int的长度,它可能是1位数,也可能是10位数。我也不知道找到字符串开头位置的第一个字符。
关于如何检索/减去int的任何想法?
$length_value=???
$string_value=???
答案 0 :(得分:2)
假设压缩数据 NEVER 以数字开头,那么正则表达式最简单:
$string = '187xœËHÍÉÉ,';
preg_match('/^(\d+)/', $string, $matches);
$number = $matches[0];
$compressed_data = substr($string, 0, strlen($number));
如果压缩数据以数字开头,那么你最终会得到损坏的数据 - 你绝对无法区分“长度”值停止和压缩数据开始的位置,例如
$compressed = '123foo';
$length = '6';
$your_string = '6123foo';
好的 - 这是一个长度为61的字符串,压缩数据为23foo?还是612 + 3foo?
答案 1 :(得分:0)
您可以使用preg_match()
来捕获字符串开头的整数。
http://php.net/manual/en/function.preg-match.php
答案 2 :(得分:0)
你可以这样做:
$contents = "187xœËHÍÉÉ,";
$length = (int)$contents;
$startingPosition = strlen((string)$length);
$original = gzuncompress(substr($contents, $startingPosition), $length);
但我觉得如果第一个压缩字节是数字,这可能会失败。