background image

// Scan all but the last chunk
for($j= 0;$j<$chunkCount- 1;$j++) {
$chunks[$j] = preg_replace('/ {2,}$/',"\t",$chunks[$j]);
}
// If the last chunk is a tab-stop's worth of spaces
// convert it to a tab; Otherwise, leave it alone
if($chunks[$chunkCount-1] ==str_repeat(' ',$tab_stop)) {
$chunks[$chunkCount-1] ="\t";
}
// Recombine the chunks
$lines[$i] = implode('',$chunks);
}
// Recombine the lines
returnimplode("\n",$lines);
}
$tabbed= pc_tab_unexpand($ob->message);
?>

 

这两个函数都以一个字符串作为参数,并返回经过修改后的结果字符串。
这两个函数都假定每 8 个字符设置一个制表位,不过这可以通过更改变量$tab_stops

的设置来重新设定。

函数 pc_tab_expand()中的正则表达式既可以匹配一组制表符,也可匹配一行中位于

这组制表符之前的所有文本。之所以需要匹配这组制表符之前的文本,是因为那些文本的
长度会影响到这组制表符应该用多少个空格来替换,才能使后面的文本与下一个制表位
对齐。这个函数不仅仅只是将每个制表符都替换为 8 个空格符,它还要调整制表符后面的
文本与制表位对齐。

同样地,pc_tab_ unexpand()函数也不仅仅是寻找 8 个连续的空格符,然后用一个制表

符将其替换掉那么简单。它会把每一行都分割成 8 个字符一组的字符段,然后把这些字符
段末尾处的空白(至少两个空格)替换成制表符。这样,不仅可以保持文本与制表符对齐,
而且还可以保留字符串中的空格。

好了,PHP 中扩展和压缩制表符的使用方法就介绍到这里了。