php 截取GBK文檔某個(gè)位置開(kāi)始的n個(gè)字符方法
cut.php:
#!/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內(nèi)容:
dkei20王nnso
測(cè)試命令:
./cut.php 6 1
查看結(jié)果:
hexdump -C t.txt && hexdump -C a.txt
以上這篇php 截取GBK文檔某個(gè)位置開(kāi)始的n個(gè)字符方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
php使用get_class_methods()函數(shù)獲取分類的方法
這篇文章主要介紹了php使用get_class_methods()函數(shù)獲取分類的方法,結(jié)合實(shí)例形式分析了get_class_methods()函數(shù)獲取類中成員方法的使用技巧,需要的朋友可以參考下2016-07-07
PHP簡(jiǎn)單實(shí)現(xiàn)記錄網(wǎng)站訪問(wèn)量功能示例
這篇文章主要介紹了PHP簡(jiǎn)單實(shí)現(xiàn)記錄網(wǎng)站訪問(wèn)量功能,涉及php針對(duì)文件加鎖讀寫(xiě)及日期時(shí)間轉(zhuǎn)換等相關(guān)操作技巧,需要的朋友可以參考下2018-06-06
PHP Class&Object -- 解析PHP實(shí)現(xiàn)二叉樹(shù)
本篇文章是對(duì)PHP中二叉樹(shù)的實(shí)現(xiàn)代碼進(jìn)行詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
PHP頁(yè)面實(shí)現(xiàn)定時(shí)跳轉(zhuǎn)的方法
這篇文章主要介紹了PHP頁(yè)面實(shí)現(xiàn)定時(shí)跳轉(zhuǎn)的方法,實(shí)例演示使用header函數(shù)來(lái)實(shí)現(xiàn)跳轉(zhuǎn)的技巧,需要的朋友可以參考下2014-10-10
php實(shí)現(xiàn)的二叉樹(shù)遍歷算法示例
這篇文章主要介紹了php實(shí)現(xiàn)的二叉樹(shù)遍歷算法,結(jié)合具體實(shí)例形式分析了php針對(duì)二叉樹(shù)的常用前序、中序及后序遍歷算法實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-06-06
PHP執(zhí)行php.exe -v命令報(bào)錯(cuò)的解決方案
這篇文章主要介紹了PHP執(zhí)行php.exe -v命令報(bào)錯(cuò)的解決方案,文中通過(guò)圖文講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-12-12

