我需要在网页中显示包含两个空格制表符数据列的纯文本文件。
我所做的是使用 PHP 读取文本文件并在 <pre>
之间打印出来。标签使用等宽字体:
<pre>
<?php
$fn="data.txt";
$fi=fopen($fn, "r");
$fc=fread($fi, filesize($fn)); //open and read text file
fclose($fi);
$fc=str_replace("\t", " ", $fc); //replace tabs with two spaces
print($fc); //print data between PRE tags
?>
</pre>
它几乎可以工作,但是选项卡很麻烦。用两个空格替换制表符是微不足道的,但是非空白字符会被推过去而不是吸收到制表符中。真标签吸收n-1
非空白字符(其中 n
是每个制表符的空格数)。
例如,下表应该这样显示:
| | 43| 43| 7| | |
| 12|128|128|128| | 53|
| 3| 3| 3| 3| | |
| | | 21| 21| 39| |
然而,通过用两个空格盲目地替换所有 制表符,我们得到了这个:
| | 43| 43| 7| | |
| 12|128|128|128| | 53|
| 3| 3| 3| 3| | |
| | | 21| 21| 39| |
我正在尝试找出一种(相当简单的)方法将制表符转换为空格,同时考虑不占用完整 n
的制表符空格。
最佳答案
我前段时间写过这个函数,可能会有帮助:
function tab2space($line, $tab = 4, $nbsp = FALSE) {
while (($t = mb_strpos($line,"\t")) !== FALSE) {
$preTab = $t?mb_substr($line, 0, $t):'';
$line = $preTab . str_repeat($nbsp?chr(7):' ', $tab-(mb_strlen($preTab)%$tab)) . mb_substr($line, $t+1);
}
return $nbsp?str_replace($nbsp?chr(7):' ', ' ', $line):$line;
}
本来是用来处理多字节字符串的,如果只有数字,可以去掉mb_
,这样会加快这个函数的速度。
[+] 请注意,这意味着只处理一行,因此您需要使用 fgets
逐行处理,而不是一次处理整个文件。
关于php - 使用 PHP 将制表符转换为空格以供 HTML 显示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14308168/