【问题标题】:How can line breaks be added to a data:text/plain URI?如何将换行符添加到 data:text/plain URI?
【发布时间】:2019-07-27 03:44:43
【问题描述】:

我的目标是使用 HTML5 的<a download> 标签/属性中的data URI 生成一个带有换行符的文本文件。目前换行符似乎被忽略了。

以下是使用download 的HTML5 属性的示例,其中输出是带有链接的HTML 文件。单击时,该链接可用于打开或保存文件。

用PHP生成这样一个下载链接的例子:

<?php
    //generate a string line with line breaks
    //i.e. using PHP:
    //where PHP_EOL is "The correct 'End Of Line' symbol for current platform"
    $content = "line" . PHP_EOL . "line"; 
?>

<a download="a.txt" href="data:text/plain;utf8,<?=$content?>">Download</a>

尽管字符串中有换行符,但目前我的输出是:

lineline

当预期的输出是:

line
line

使用 HEX 检查字符串,它确实有字符 0A 0D,代表 CR 和 LF,所以它们确实在 &lt;a download&gt; 标记之前。

有没有办法强制在下载的文件中看到换行符? 如果不是,这是 HTML 的 download 标签的限制吗?

【问题讨论】:

  • 在没有download 属性的情况下是否可以正常工作(例如,直接在浏览器中输入data URI 时)?如果不是,我猜问题是关于 data URI,而不是 download 属性,对吧?
  • 没有download 属性,它仍然将所有内容放在一行上,吃掉换行符,所以是的。

标签: html line-breaks data-uri plaintext


【解决方案1】:

使用base 64 encode it

以下是"Hello\nWorld"

<a download="foo.txt"
href="data:text/plain;base64,aGVsbG8Kd29ybGQ=">
    Download
</a>

【讨论】:

    【解决方案2】:

    您在哪个程序中打开文件?是记事本吗?这可能是个问题...

    【讨论】:

    • 尝试了记事本和 Textpad(.com),这通常可以很好地显示棘手的换行符,但不,同样的事情 - 没有换行符,使用任一编辑器。
    • 我遇到了同样的问题,在记事本中打开时,但在 sublime 文本编辑器中打开时就没事了
    • 你到底在做什么?我下载了 Sublime,但仍然没有换行符……我在 Windows 10 Pro 上,使用 Mozilla Firefox 65.0.1。我在我的示例中运行 PHP,保存文件,然后使用 Sublime 打开它,并且.. 没有换行符。
    • 我尝试了所有可能的文本编辑器,结果和你一样,没有换行符。试图找出原因(我使用的是谷歌浏览器)。
    最近更新 更多