【问题标题】:How to save html code generated in php?如何保存在php中生成的html代码?
【发布时间】:2013-08-29 18:34:10
【问题描述】:

我正在使用php生成一些html代码

现在,

<textarea>
<html>
....
</html>
</textarea>

我想做的是创建一个按钮'save as html'

当我按下它时,它有一个窗口另存为对话框,允许用户选择存储位置,

然后在确认时保存到那个地方(对话框不应该由我创建,使用 windows 的。)

工作流程是:首先我在服务器中保存了一个临时 html 文件,然后用户打开对话框,(我不需要担心“保存到部分”,只需要指定临时 html 文件路径) ,当用户关闭时,我删除临时文件。那么,如何实现呢?谢谢

再次感谢您。

【问题讨论】:

标签: php html forms


【解决方案1】:

您不能只将&lt;html&gt; 标记放入&lt;textarea&gt; 标记中,那样是行不通的。

我建议您使用预制解决方案,例如 TinyMCE,它将为您处理大部分事情。还可以使用 HTML Purifier 之类的东西在保存用户输入之前对其进行清理,因为有人可能会保存恶意脚本。

TinyMCE 网站上有很多关于如何使用它的示例。

【讨论】:

  • 我目前正在使用ckeditor,我相信这是类似的东西,有没有他们提供的保存功能?谢谢
  • @user782104:我从来没有使用过 ckeditor,但它看起来是可能的。参见例如:goo.gl/4TcWGstackoverflow.com/questions/7777110/…(我并没有在 Google 上搜索过很多......)
【解决方案2】:

PHP 在服务器端,别忘了。生成页面后,它就在客户端上。我认为用 javascript 做这种事情更有意义,尽管您也可以将数据发布到 PHP 页面,然后获取数据。

通过 POST 方法将“输入”数据发送到 PHP 页面:

<form action="savedata.php">
     <input id="someElement" name="someElementName" type="textarea" />
     <input type="submit" />
</form>

在PHP端接收:

# savedata.php

$inputdata = $_POST["someElementName"];
$filename = "somefile.html";
file_put_contents($filename, $inputdata);

然后你可以在 PHP 中有一个链接来下载文件。

echo "<a href='".$filename."'>Right-click, Save Target As...</a>";

之后,您可以像这样从服务器中删除文件:

unlink($filename);

要打开保存文件对话框 - 重定向到文件,您的浏览器应打开保存文件对话框:

header('Content-type: text/plain'); 
header('Content-disposition: attachment; filename="$filename"'); 

要查看文件的预览,请制作 iframe:

echo "<iframe src='$filename' width=600 height=200 frameborder=0 />";

【讨论】:

  • 谢谢,毕竟我怎么能“另存为”?
  • 它说的部分 header('Content-disposition: attachment; filename="$filename"');对此负责
  • @user782104 是的,因为文件在您的服务器上 - 只需将其放入 iframe 中即可。用示例更新了答案。
【解决方案3】:

您可以使用 php 标头函数来做到这一点,就像这样(假设您的 html 已发布到此页面:

<?php

header('Content-Disposition: attachment; filename="filename.html"');
echo $_POST['html'];
?>

将此 php 页面设置为该表单的目标,我想你会完成

编辑:但你应该注意可能的 XSS 攻击,比如评论中提到的 Damien Pirsy,你总是可以清理输入,去掉不需要的东西,比如脚本。

【讨论】:

  • 不过,这将是 XSS 攻击者的天堂。让他们在你的服务器上创建任意 html 文件……嗯,味道
  • 你是对的,但是人们可以按照他们想要的方式使用它并对其进行清理,例如剥离脚本和所有内容
  • 嗯,这将是您的答案的一个很好的整合
  • @AL-Kateb 当他试图生成一个 HTML 页面时,你会怎么做?
  • 问题很具体,答案也很具体,他有一个包含 html 代码的文本区域,他发布了那个 html 代码,它被清理并发送给用户代理,这仍然可以保存html文件就好了,答案背后的重点是指出如何在您询问时进行另存为对话,请注意脚本和所有内容
猜你喜欢
  • 2020-05-01
  • 1970-01-01
  • 2020-10-22
  • 1970-01-01
  • 1970-01-01
  • 2017-10-05
  • 1970-01-01
  • 1970-01-01
  • 2011-04-09
相关资源
最近更新 更多