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

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

(0)

相关推荐

  • php截取字符串之截取utf8或gbk编码的中英文字符串示例

    微博的发言有字数限制,其计数方式是,中文算2个,英文算1个,全角字符算2个,半角字符算1个.php中自带strlen是返回的字节数,对于utf8编码的中文返回时3个,不满足需求.mb_strlen 可以根据字符集计算长度,比如utf8的中文计数为1,但这不符合微博字数限制需求,中文必须计算为2才可以.google了下,找到一个discuz中截取各种编码字符的类,改造了下,已经测试通过.其中参数$charset 只支持gbk与utf-8. 复制代码 代码如下: $a = "s@@你好";

  • php字符串截取问题

    但是在英文和汉字混合的情况下会出现如下问题: 如果有这样一个字符串 $str="这是一个字符串"; 为了截取该串的前10个字符,使用 if(strlen($str)>10) $str=substr($str,10)."-"; 那么,echo $str的输出应该是"这是一个字-" 假设 $str="这是1个字符串": 这个串中包含了一个半角字符,同样执行: if(strlen($str)>10) $str=subst

  • php 在字符串指定位置插入新字符的简单实现

    php 在字符串指定位置插入新字符的简单实现 因为项目用到DataTable表格加载后台数据,要连表查询虚拟机选中的策略状态,所以想到先把策略表内容取出来,组成一个'<select><option value="1"></option>[n个option]</select>'字符串,在遍历虚拟机列表时把他的策略值拼成 'value="1"' 这样的字符串,再利用explode()和implode() 函数,组成新的字符

  • 详解PHP用substr函数截取字符串中的某部分

    经常看到有新手问PHP有没有类似asp的left函数或right函数,实现截取某字符串左边或右边开始N个字符的函数.答案当然是有的.PHP中的substr函数就可以做的到,只不过PHP把二个函数合二为一了. 现在整理了一下substr函数的用法,做了几个例子以解新人之惑,高手请飘过. 我们先来看一下PHP substr函数的语法: string substr(string string, int start, int [length]) 参数string为要操作的字符串 参数start为你要截取

  • php截取字符串函数分享

    经常看到有新手问PHP有没有类似asp的left函数或right函数,实现截取某字符串左边或右边开始N个字符的函数.答案当然是有的.PHP中的substr函数就可以做的到,只不过PHP把二个函数合二为一了,这里再给大家分享一个更加优秀的截取字符串的函数. 复制代码 代码如下: /**      * 方法库-截取字符串-[该函数作者未知]      * @param string  $string 字符串       * @param int     $length 字符长度      * @pa

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

    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, 'r

  • C#编程读取文档Doc、Docx及Pdf内容的方法

    本文实例讲述了C#编程读取文档Doc.Docx及Pdf内容的方法.分享给大家供大家参考.具体分析如下: Doc文档:Microsoft Word 14.0 Object Library (GAC对象,调用前需要安装word.安装的word版本不同,COM的版本号也会不同) Docx文档:Microsoft Word 14.0 Object Library (GAC对象,调用前需要安装word.安装的word版本不同,COM的版本号也会不同) Pdf文档:PDFBox /* 作者:GhostBea

  • Java 在 Word 文档中使用新文本替换指定文本的方法

    创作一份文案,经常会高频率地使用某些词汇,如地名.人名.人物职位等,若表述有误,就需要整体撤换.文本将介绍如何使用Spire.Doc for Java,在Java程序中对Word文档中的指定文本进行替换. 工具/原料 Free Spire.Doc for Java(免费版) IntelliJ IDEA Jar文件获取及导入 方法1:先从官网下载jar包. 导入步骤: 下载后,解压文件,并将lib文件夹下的Spire.Doc.jar文件导入java程序.参考如下导入效果: 方法2:可通过maven

  • python将txt文档每行内容循环插入数据库的方法

    如下所示: import pymysql import time import re def get_raw_label(rece): re1 = r'"([\s\S]*?)": "' #-------------正则表达式 reg1 = re.compile(re1) # ------------编译一下 str1 = reg1.findall(rece) return str1 def get_detail(rece): re2 = r'": "([\

  • 仅img元素创建后不添加到文档中会执行onload事件的解决方法

    示例 复制代码 代码如下: <!DOCTYPE HTML> <HTML> <HEAD> <meta charset="utf-8" /> <title>仅img元素创建后却不添加到文档中会执行onload事件</title> </HEAD> <BODY> <script> var img = document.createElement('img'); img.src = &qu

  • C#向word文档插入新段落及隐藏段落的方法

    编辑Word文档时,我们有时会突然想增加一段新内容:而将word文档给他人浏览时,有些信息我们是不想让他人看到的.那么如何运用C#编程的方式巧妙地插入或隐藏段落呢?本文将与大家分享一种向Word文档插入新段落及隐藏段落的好方法. 这里使用的是Free Spire.Doc for .NET组件,该组件允许开发人员轻松并灵活地操作Word文档. 向Word文档插入一个新段落的操作步骤 步骤1:新建一个文档并加载现有文档 Document document = new Document(); docu

  • Python 使用tf-idf算法计算文档关键字权重并生成词云的方法

    Python 使用tf-idf算法计算文档关键字权重,并生成词云 1. 根据tf-idf计算一个文档的关键词或者短语: 代码如下: 注意需要安装pip install sklean: from re import split from jieba.posseg import dt from sklearn.feature_extraction.text import TfidfVectorizer from collections import Counter from time import

  • Java解析word,获取文档中图片位置的方法

    前言(背景介绍): Apache POI是Apache基金会下一个开源的项目,用来处理office系列的文档,能够创建和解析word.excel.ppt格式的文档. 其中对word文档的处理有两个技术,分别是HWPF(.doc)和XWPF(.docx).如果你对这两个技术熟悉的话,就应该能明白使用java解析word文档的痛楚所在. 其中两个最大的问题在于: 第一是这两个类并没有统一的父类和接口(隔壁的XSSF和HSSF投过来鄙视的眼光),所以没法进行同一格式的接口式编程: 第二是官方API中并

  • PHP使用DOM和simplexml读取xml文档的方法示例

    本文实例讲述了PHP使用DOM和simplexml读取xml文档的方法.分享给大家供大家参考,具体如下: 实例  用DOM获取下列xml文档中所有金庸小说的书名,该xml文档所在位置为 ./books.xml: <?xml version="1.0" encoding="utf-8"?> <root> <book> <title>天龙八部</title> <author>金庸</autho

  • 我的文档和QQ聊天记录备份与恢复技巧

    "我的文档"备份与恢复技巧: 最原始的办法:重装系统前将"我的文档"下的所有文件复制到可移动磁盘(移动硬盘)或者系统盘外的其他地方,然后在系统重装后在复制到新的"我的文档"所在目录下即可:  本站推荐方法:平时在使用电脑的时候将"我的文档"的属性进行设置,设置的办法是在系统盘外的盘符下建立一个新文件夹(比如my document),然后在"我的文档"右键-移动-找到刚建立的文件夹(my document)-

随机推荐