PHP文件编辑器 - 解决一些错误

时间:2016-12-23 15:36:00

标签: php html

我为我的网站开发公司制作了一个在线文件编辑器和文件管理器脚本,以便我们的托管网站用户可以管理自己的文件并根据自己的需要编辑模板。它以PHP编码,允许用户编辑html,text,php,js,jquery和任何基于文本的文件。由于我们只支持英语并在utf-8中编写所有代码,因此它是为支持utf-8编码而构建的。

不幸的是,我在测试过程中发现了一个小问题。由于我使用的是htmlentities,然后在保存(提交)时使用html_entities_decode,因此用户输入的任何内容,他们希望保留为htmlentity,然后我的代码也会转换。< / p>

这是一张图片,用于说明我们遇到的问题: enter image description here

以下是我用来将textarea的内容写入原始文件的过程:

if(isset($_POST['filecontents'])) {
    $contents = $_POST['filecontents'];
    $filecontents = html_entity_decode($contents, ENT_NOQUOTES, "UTF-8");
    $fileloc = "/htdocs/usr/". $_POST['filename'];
    $filewrite = fopen($fileloc, "w");
    fwrite($filewrite, $filecontents);
    fclose($filewrite);
    die();
}

由于我使用htmlentities将文件输出到可编辑的textarea中,因此它在文本区域看起来正确,但是当它被保存时,它会转换所有项目而不仅仅是我想要转换的项目,所以当它们重新提交时在页面上,它们丢失了版权符号,注册符号,菜单按钮等。如果我不要在我将其输出到页面之前使用htmlentities,那么任何PHP脚本代码都会尝试运行,因为它被回显,任何结束标记如</textarea>都可能导致巨大的脚本的问题。

提问时间: 有没有办法正确替换所有打开和关闭标记,即<>文件中的htmlentities替代但不替换脚本中的任何其他实体?这样,输入的任何其他内容都将在之后正确保存到文件中。

1 个答案:

答案 0 :(得分:4)

你不应该致电html_entity_decode()

htmlentities()是将任意内容插入HTML源代码所必需的。 但是,来自浏览器的POST是原始文本,而不是HTML编码。