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个字符方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。