从字符串PHP获取int位置

时间:2013-07-29 15:11:56

标签: php

我从PUSH服务接收数据。此数据使用gzcompress()压缩。在数据的最开始,它包含一个int,它是所包含数据的长度。这是在gzcompress()之后完成的;所以样本数据将是:

187xœËHÍÉÉ,

生成
echo '187'.gzcompress('Hello');

现在,我不知道int的长度,它可能是1位数,也可能是10位数。我也不知道找到字符串开头位置的第一个字符。

关于如何检索/减去int的任何想法?

$length_value=???
$string_value=???

3 个答案:

答案 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);

但我觉得如果第一个压缩字节是数字,这可能会失败。