使用PHP创建制表符分隔文件时遇到问题

时间:2011-08-12 08:11:53

标签: php

我正在尝试使用PHP创建一个制表符分隔文件并遇到一些麻烦。基本上我的标签和换行符\t\n最终会被打印出来,而不是转换成他们应该的样子。

我的代码很简单:

$sql = 'SELECT * FROM products';
$res = mysql_query($sql);

$page_print = 'id \t title \t description \t price';

while($row = mysql_fetch_array($res)) {
    $page_print .= $row['product_id'] . ' \t ' . $row['product_name'] . ' \t ' . strip_tags($row['product_content']) . ' \t ' . $row['product_price'] . '\n';
}

$page_print = sanitize_output($page_print);

$myFile = "products.txt";
$fh = fopen($myFile, 'w');
$stringData = trim($page_print);
fwrite($fh, $stringData);
fclose($fh);

我在这里做错了什么?

5 个答案:

答案 0 :(得分:6)

\t\n周围使用双引号。您也可以使用PHP_EOL常量作为行尾。

$page_print .= $row['product_id'] . " \t " . $row['product_name'] . " \t " . strip_tags($row['product_content']) . " \t " . $row['product_price'] . PHP_EOL;

答案 1 :(得分:5)

您需要使用双引号(“)附加它们。

引自PHP

  

注意:与双引号和heredoc语法,变量和。不同   特殊字符的转义序列不会被扩展   以单引号字符串出现。

答案 2 :(得分:5)

而不是编写自己的代码。您可以使用 fputcsv 功能

$sql = 'SELECT * FROM products ';
$res = mysql_query($sql);

$myFile = "products.txt";
$fh = fopen($myFile, 'w');
fputcsv($fh, array('id', 'title', 'description', 'price'), "\t");

while($row = mysql_fetch_array($res)) {
  fputcsv($fh, $row, "\t");
}

fclose($fh);

答案 3 :(得分:1)

使用双引号"代替单'

$page_print .= $row['product_id'] . " \t " . $row['product_name'] . " \t " . strip_tags($row['product_content']) . " \t " . $row['product_price'] . "\n";

编辑1

当然你也可以使用chr()

$page_print .= $row['product_id'] . chr(9) . $row['product_name'] ;

答案 4 :(得分:0)

仅当使用双引号(\t) - http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.double

时,

" "才会在输出中成为标签符号