Jar*_*ick 2 php string text substr file-get-contents
我正在尝试从外部文本文件中获取大约200个字母/字符(包括空格)。我有代码来显示要包含的文本,但是要获得某些字母我不知道。我再一次不是在说线,我的意思是字母。
<?php
$file = "Nieuws/NieuwsTest.txt";
echo file_get_contents($file) . '<br /><br />';
?>
Run Code Online (Sandbox Code Playgroud)
使用的第五个参数file_get_contents
:
$s = file_get_contents('file', false, null, 0, 200);
Run Code Online (Sandbox Code Playgroud)
不幸的是,这仅适用于256个字符集,并且不适用于多字节字符,因为PHP 不提供本机Unicode支持。
为了读取特定数量的Unicode字符,您将需要使用诸如intl和mbstring之类的PHP扩展来实现自己的功能。例如,fread
可以按以下方式实现接受最大数量的UTF-8字符的版本:
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);
}
Run Code Online (Sandbox Code Playgroud)
如果$length
为正,则该函数读取该数目的字符的UTF-8字符串可以占用的最大字节数(UTF-8字符表示为1至4个8位字节),并提取第一个$length
多字节字符使用mb_substr
。否则,该函数将读取整个文件。
的UTF-8版本file_get_contents
可以类似的方式实现:
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);
}
Run Code Online (Sandbox Code Playgroud)