【问题标题】:How to get x amount of characters from text file using php?如何使用php从文本文件中获取x个字符?
【发布时间】:2017-01-20 12:01:05
【问题描述】:

我正在尝试从外部文本文件中获取大约 200 个字母/字符(包括空格)。我有代码来显示我将包含的文本,但要获得某些字母我不知道。再一次,我不是在谈论行,我真的是指字母。

<?php
    $file = "Nieuws/NieuwsTest.txt";
    echo file_get_contents($file) . '<br /><br />';
?>

【问题讨论】:

  • 你可以在PHP中使用substr函数。
  • 你想获取字符串的前 200 个字符吗?

标签: php string text file-get-contents substr


【解决方案1】:

使用file_get_contents的第五个参数:

$s = file_get_contents('file', false, null, 0, 200);

这仅适用于 256 个字符集,并且不能正常适用于多字节字符,因为 PHP does not offer native Unicode support,很遗憾。

Unicode

为了读取特定数量的 Unicode 字符,您需要使用 PHP 扩展实现自己的函数,例如 intlmbstring。例如,接受最大 UTF-8 字符数的fread 版本可以实现如下:

function utf8_fread($handle, $length = null) {
  if ($length > 0) {
    $string = fread($handle, $length * 4);
    return $string ? mb_substr($string, 0, $length) : false;
  }

  return fread($handle);
}

如果$length 为正数,则函数读取该字符数的 UTF-8 字符串可以占用的最大字节数(一个 UTF-8 字符表示为 1 到 4 个 8 位字节),并且使用mb_substr 提取第一个$length 多字节字符。否则,该函数将读取整个文件。

file_get_contents 的 UTF-8 版本可以用类似的方式实现:

function utf8_file_get_contents(...$args) {
  if (!empty($args[4])) {
    $maxlen = $args[4];
    $args[4] *= 4;
    $string = call_user_func_array('file_get_contents', $args);
    return $string ? mb_substr($string, 0, $maxlen) : false;
  }

  return call_user_func_array('file_get_contents', $args);
}

【讨论】:

  • 如果他不需要将全文存储在 var 中,那是最好的方法!好的 !最简单的解决方案总是最好的
  • 有一个问题,它像 mb_substr 一样多字节安全吗? php.net/manual/en/function.substr.php#90581
  • @Math, file_get_contents 是二进制安全的。但是,限制是指字节数,而不是例如 Unicode 字符。因此,对于非 ASCII 字符,他将需要另一种解决方案。
【解决方案2】:

你应该使用 substr() 函数。

但我建议您使用多字节保险箱mb_substr()

    $text = mb_substr( file_get_contents($file), 200 ) . '<br /><br />';

使用 substr 如果有一些重音等,你会遇到麻烦。这些问题不会发生在 mb_substr()

【讨论】:

    【解决方案3】:

    使用这个:

    <?php
        $file = "Nieuws/NieuwsTest.txt";
        echo substr( file_get_contents($file), 0, 200 ) . '<br /><br />';
    ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-07
      相关资源
      最近更新 更多