php 截取GBK文档某个位置开始的n个字符方法


Posted in PHP onMarch 08, 2017

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内容:

dkei20王nnso

测试命令:

./cut.php 6 1

查看结果:

hexdump -C t.txt && hexdump -C a.txt

以上这篇php 截取GBK文档某个位置开始的n个字符方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP5.2下chunk_split()函数整数溢出漏洞 分析
Jun 06 PHP
pw的一个放后门的方法分析
Oct 08 PHP
php 清除网页病毒的方法
Dec 05 PHP
解析php中static,const与define的使用区别
Jun 18 PHP
Linux下PHP连接Oracle数据库
Aug 20 PHP
php格式化日期实例分析
Nov 12 PHP
php异步多线程swoole用法实例
Nov 14 PHP
PHP+APACHE实现网址伪静态
Feb 22 PHP
Laravel 5框架学习之环境与配置
Apr 08 PHP
Docker配置PHP开发环境教程
Dec 21 PHP
PHP获取当前执行php文件名的代码
Mar 02 PHP
php如何获取Http请求
Apr 30 PHP
php封装json通信接口详解及实例
Mar 07 #PHP
PHP获取真实客户端的真实IP
Mar 07 #PHP
php实现简单加入购物车功能
Mar 07 #PHP
mac os快速切换多个PHP版本的方法
Mar 07 #PHP
PHP + plupload.js实现多图上传并显示进度条加删除实例代码
Mar 06 #PHP
PHP实现添加购物车功能
Mar 06 #PHP
PHP自动补全表单的两种方法
Mar 06 #PHP
You might like
php正则校验用户名介绍
2008/07/19 PHP
php打开远程文件的方法和风险及解决方法
2013/11/12 PHP
thinkphp5.1 文件引入路径问题及注意事项
2018/06/13 PHP
laravel5使用freetds连接sql server的方法
2018/12/07 PHP
javascript 有用的脚本函数
2009/05/07 Javascript
Jquery+WebService 校验账号是否已被注册的代码
2010/07/12 Javascript
谷歌浏览器不支持showModalDialog模态对话框的解决方法
2014/09/22 Javascript
JavaScript操作Cookie详解
2015/02/28 Javascript
全面了解javascript三元运算符
2016/06/27 Javascript
Jquery AJAX POST与GET之间的区别详细介绍
2016/10/17 Javascript
webix+springmvc session超时跳转登录页面
2016/10/30 Javascript
jquery购物车结算功能实现方法
2020/10/29 Javascript
VUE 更好的 ajax 上传处理 axios.js实现代码
2017/05/10 Javascript
vue项目常用组件和框架结构介绍
2017/12/24 Javascript
简述JS浏览器的三种弹窗
2018/07/15 Javascript
JavaScript多种页面刷新方法小结
2019/04/04 Javascript
[03:55]2016国际邀请赛中国区预选赛首日TOP10精彩集锦
2016/06/27 DOTA
利用Python爬虫给孩子起个好名字
2017/02/14 Python
Django跨域请求CSRF的方法示例
2018/11/11 Python
python 实现读取一个excel多个sheet表并合并的方法
2019/02/12 Python
详解django+django-celery+celery的整合实战
2019/03/19 Python
python 图片去噪的方法示例
2019/07/09 Python
将python运行结果保存至本地文件中的示例讲解
2019/07/11 Python
pycharm创建scrapy项目教程及遇到的坑解析
2019/08/15 Python
python写入数据到csv或xlsx文件的3种方法
2019/08/23 Python
python 实现围棋游戏(纯tkinter gui)
2020/11/13 Python
Python读取图像并显示灰度图的实现
2020/12/01 Python
call在Python中改进数列的实例讲解
2020/12/09 Python
世界上最大的隐形眼镜商店:1-800 Contacts
2018/11/03 全球购物
说一下Linux下有关用户和组管理的命令
2016/01/04 面试题
春节联欢晚会主持词范文
2014/03/24 职场文书
大学生创业计划书
2014/08/14 职场文书
车间主任岗位职责
2015/02/03 职场文书
社区元宵节活动总结
2015/02/06 职场文书
军训个人总结
2015/03/03 职场文书
同事去世追悼词
2015/06/23 职场文书