通过PHP渲染纯文本

时间:2010-12-22 06:20:04

标签: php text header robots.txt plaintext

出于某种原因,我想通过PHP脚本提供我的robots.txt。我已经设置了apache,以便robots.txt文件请求(实际上是所有文件请求)都来自单个PHP脚本。

我用来渲染robots.txt的代码是:

echo "User-agent: wget\n";
echo "Disallow: /\n";

但是,它不处理换行符。如何正确地服务robots.txt,以便搜索引擎(或任何客户端)正确看到它?我是否必须为txt文件发送一些特殊标题?

编辑1:

现在我有以下代码:

header("Content-Type: text/plain");
echo "User-agent: wget\n";
echo "Disallow: /\n";

仍然不显示换行符(请参阅http://sarcastic-quotes.com/robots.txt)。

编辑2:

有些人提到它很好并且没有在浏览器中显示。只是好奇这个如何正确显示:http://en.wikipedia.org/robots.txt

编辑3:

我通过wget下载了我的和维基百科,并看到了:

$ file en.wikipedia.org/robots.txt
en.wikipedia.org/robots.txt: UTF-8 Unicode English text

$ file sarcastic-quotes.com/robots.txt
sarcastic-quotes.com/robots.txt: ASCII text

最终摘要:

主要问题是我没有设置标题。但是,还有另一个内部错误,它将Content-Type设为html。 (这是因为我的请求实际上是通过内部代理提供的,但这是另一个问题)。

浏览器未显示换行符的一些注释只有一半正确 - >如果content-type是text / plain,现代浏览器会正确显示换行符。我选择的答案与真正的问题非常匹配,并且没有上述略有误导性的误解:)。感谢大家的帮助和你的时间!

感谢

JP

6 个答案:

答案 0 :(得分:23)

是的,您忘记将输出的内容类型设置为text/plain

header("Content-Type: text/plain");

您的输出可能是以HTML格式发送的,其中换行符被截断为空格,要实际显示换行符,您需要<br />标记。

答案 1 :(得分:4)

  1. header('Content-Type: text/plain')是正确的。
  2. 您必须在之前调用此方法将任何内容写入输出,包括空格。在开放<?php之前检查空格。
  3. 如果您的Content-Type标头已设置为text/plain,则右脑中的浏览器不会崩溃空白。这种行为是HTML和类似格式所独有的。
  4. 我确定您有理由,但通常通过PHP提供静态内容会使用不必要的服务器资源。每次点击PHP通常都是一个新的进程生成和一些内存。您可以使用apache config指令根据User-Agent这样的标题指向不同的机器人文件 - 我会对此进行调查。
  5. 搜索引擎可能会忽略Content-Type标题,因此无论如何这都不应成为问题。
  6. 希望这有帮助。

    -n

答案 2 :(得分:1)

<?php header("Content-Type: text/plain"); ?>
User-agent: wget
Disallow: /
顺便说一下,换行就好了。它们只是未在浏览器中显示。浏览器将所有空格(包括换行符)折叠到单个空格中。

deceze$ curl http://sarcastic-quotes.com/robots.txt
User-agent: wget
Disallow: /

答案 3 :(得分:0)

您必须设置所服务文档的内容类型。对于.txt文本文件:

header("Content-Type: text/plain");

IANA有关于some of the more popular MIME (content) types的信息。

答案 4 :(得分:0)

我遇到了类似的问题而且&#34; \ n&#34;也没有PHP_EOL工作。我终于使用了:

header('Content-Disposition: attachment; filename="plaintext.txt"');
header("Content-Type: text/plain");
echo "some data";
echo chr(13).chr(10);

BOTH角色的回声就是诀窍。 希望它可以帮到某人。

再见 anankin

答案 5 :(得分:-1)

如果您使用的是echo,请使用<br>表示新行。 printf函数是使用\ n。

在您的情况下,请使用printf,因为您没有使用HTML。我相信这是正确的方法,同时将MIME类型设置为文本。