Maison >développement back-end >tutoriel php >Explication détaillée d'un exemple de code permettant à PHP d'intercepter n caractères commençant à une certaine position dans un document GBK

Explication détaillée d'un exemple de code permettant à PHP d'intercepter n caractères commençant à une certaine position dans un document GBK

黄舟
黄舟original
2017-03-13 09:51:561148parcourir

L'éditeur suivant vous proposera une méthode PHP pour intercepter n caractères commençant à une certaine position dans un document GBK. L'éditeur le trouve plutôt bon, je vais donc le partager avec vous maintenant et le donner comme référence pour tout le monde. Suivons l'éditeur pour y jeter un œil

cut.php :


#!/usr/bin/php
<?php
define(&#39;INPUT_FILE&#39;, &#39;t.txt&#39;);
define(&#39;OUTPUT_FILE&#39;, &#39;a.txt&#39;);
$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, &#39;rb&#39;);
$point = 0; //current byte position
$string = &#39;&#39;; 
while(ftell($fp) < $file_size) {
  if($point >= $pos + $len) break;$byte = fread($fp, 1); 
  //php version >= 5.4
  $char = unpack(&#39;C&#39;, $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);
?>

Contenu t.txt du fichier source :

dkei20王nnso

Commande de test :

./cut.php 6 1

Afficher les résultats :

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn