cut.php:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
#!/usr/bin/php
<?php
define( 'INPUT_FILE' , 't.txt' );
define( 'OUTPUT_FILE' , 'a.txt' );
$pos = max( intval ( $argv [1]), 0);
$len = max( intval ( $argv [2]), 0);
$file_size = filesize (INPUT_FILE);
if ( $pos >= $file_size ) exit ;
$fp = fopen (INPUT_FILE, 'rb' );
$point = 0; //current byte position
$string = '' ;
while ( ftell ( $fp ) < $file_size ) {
if ( $point >= $pos + $len ) break ; $byte = fread ( $fp , 1);
//php version >= 5.4
$char = unpack( 'C' , $byte )[1];
if ( $char <= 0x7f) {
//single byte
if ( $point >= $pos ) $string .= $byte ;
$point += 1;
continue ;
} else {
//double bytes
if ( $point >= $pos ) {
$string .= $byte . fread ( $fp , 1);
} else {
fseek ( $fp , 1, SEEK_CUR);
}
$point += 1;
continue ;
}
}
fclose( $fp );
file_put_contents (OUTPUT_FILE, $string );
?>
|
源文件t.txt内容:
dkei20王nnso
测试命令:
./cut.php 6 1
查看结果:
hexdump -C t.txt && hexdump -C a.txt
以上这篇php 截取GBK文档某个位置开始的n个字符方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。