php - 使用 PHP 将制表符转换为空格以供 HTML 显示?

标签 php html whitespace

我需要在网页中显示包含两个空格制表符数据列的纯文本文件。

我所做的是使用 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):' ', '&nbsp;', $line):$line;
}

本来是用来处理多字节字符串的,如果只有数字,可以去掉mb_,这样会加快这个函数的速度。

[+] 请注意,这意味着只处理一行,因此您需要使用 fgets 逐行处理,而不是一次处理整个文件。

关于php - 使用 PHP 将制表符转换为空格以供 HTML 显示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14308168/

相关文章:

php - Laravel 5 关于共享主机的问题

javascript - 有没有办法检查一个类是否在另一个类中?

javascript - 获取表格行元素的每个子td的输入html标签的id、Name、Type、Value和文本

Ruby:删除字符串开头的空白字符

html - h2 怪异内的跨度间距

php - 如何去除 PHP 变量中的空格?

php - Firefox 错误 'no element found'

PHP 登录表单错误

php - 在线申请中的灵活数据

javascript - 如何使用按钮的 "data-"属性调用选定的 JavaScript 函数