【发布时间】:2017-02-05 01:47:51
【问题描述】:
我使用 PHP。
下面的函数加载一个大的多字节输入分隔的 CSV 文件的一部分,并在一个数组中返回一个 pointer(结束位置)和 content。使用pointer,我稍后可以再运行一次。它有效:
function part($path, $offset, $rows) {
$buffer = array();
$buffer['content'] = '';
$buffer['pointer'] = array();
$handle = fopen($path, "r");
fseek($handle, $offset);
if( $handle ) {
for( $i = 0; $i < $rows; $i++ ) {
$buffer['content'] .= fgets($handle);
$buffer['pointer'] = mb_strlen($buffer['content']);
}
}
fclose($handle);
return($buffer);
}
// Buffer first part
$buffer = part($path_to_file, 0, 100);
// Buffer second part
$buffer = part($path_to_file, $buffer['pointer'], 100);
print_r($buffer);
如果我将 $buffer['pointer'] 行更改为:
$buffer['pointer'] = mb_strlen($buffer['content'], "UTF-8");
...它不再工作...我知道当我使用 UTF-8 而不是默认编码时它使用不同的编码,但为什么它不适用于 UTF-8?
UTF-8不应该兼容外来字符吗?
因为当我在没有“UTF-8”的情况下使用上面的函数时,我想我可以在没有 UTF-8 的情况下使用它。
我仍然担心在某些情况下它会给出错误的指针?
有没有更安全的方法来获取正确的指针?
编码测试
当我这样做时,我得到UTF-8:
echo mb_detect_encoding($buffer['content']);
【问题讨论】:
标签: php string file pointers utf-8