我有一个输出文本的php页面。我想将此页面下载到文本文件中。我正在使用:
header('Content-type: application/txt');
header("Content-Disposition: attachment; filename=savethis.txt");
这下载文件很好,但文件的内容不正确。我的文本是一个空格/字符分隔的文件,所以我有这样的行:
Data1 Data2 Data3
每个数据点之间有一定数量的空格。当它下载时,它不是像上面那样过来,而是显示像
Data1 Data2 Data3
是否可以设置另一个标头,以便空格不被编码为" "?我需要那里的空格,但不需要 html 空格字符。
我似乎想不通。任何帮助将不胜感激。谢谢。
简短的回答 - 不要对它们进行编码。
是 Unicode 字符NO-BREAK SPACE
或U+00A0
的命名 HTML 实体。所以这不是SPACE
(U+0020(。您有一些代码可以显式添加它们和/或将它们编码到 HTML 实体。最好的选择是在源代码中找到该逻辑并对其进行更改。寻找可以增加
或调用的东西,例如htmlentites()
.
您的内容类型很奇怪(我希望text/plain
(。从您的描述来看,浏览器似乎将您的响应呈现为 HTML。它解码实体并显示由不间断空格分隔的内容。如果您在浏览器的开发人员工具中查看响应的实际来源,则应包括实体。基本上,发生的事情与呈现HTML标记相同。
可以替换实体。一个简单的方法是字符串替换:
$out = str_replace(' ', ' ', $in);
正则表达式将允许替换实体组:
$out = preg_replace('(( )+)', ' ', $in);
但是,如果使用htmlentities()
进行编码,则可能还会对其他字符进行编码。html_entity_decode()
为命名的 HTML 实体提供解码,但结果将是无中断空格。您可能需要将其与str_replace()
结合使用:
$in = 'hello world ähm';
$out = str_replace(
"u{00A0}", " ", html_entity_decode($in, ENT_COMPAT | ENT_HTML401, 'utf-8')
);
var_dump($out);
输出:
string(16) "hello world ähm"