【问题标题】:Prevent php code from executing in textarea on save防止 php 代码在保存时在 textarea 中执行
【发布时间】:2013-12-07 14:33:42
【问题描述】:

我有一个 cms 问题,当您尝试保存它时,textarea 内的代码正在执行。例如,假设您有一个文本区域,其中包含以下 html/php。

<div class="footer">
    <?php include("assets/footer.php"); ?>
</div>

在大多数服务器上,它工作正常,只是将代码作为文本读取并完美保存。但是,在其他服务器上,它实际上会解析 php 并在您单击保存时执行它。这会导致错误并破坏应用程序。我尝试了不同的打开和读取文件的方法,例如 fread 和 file_get_contents ,但它们的行为似乎都一样。我还尝试将加载到块中的数据包装为 CDATA,但这也无济于事。

任何其他想法可能导致此问题以及解决此问题的任何方法?

非常感谢您在此问题上提供的任何帮助。

这是文本的保存方式:

$fp = @fopen($fname, "w");

         if ($fp) {
            fwrite($fp, $block);
            fclose($fp);
          }

这是读取文件的方式:

if (file_exists($fname)) { 
    $fp = @fopen($fname, "r");

    if (filesize($fname) !== 0) {
        $loadblock = fread($fp, filesize($fname));
        $loadblock = htmlspecialchars($loadblock);
        fclose($fp);
     }  
}

这是表格:

<form method = "post" action = "">      
    <textarea  name = "text" ><?php echo $loadblock; ?></textarea>
</form>

【问题讨论】:

  • 在 textarea 周围有一个表单,可以将 textarea 内的内容保存到 .html 文件中。
  • 对不起,我添加了上面的代码。
  • 这不是服务器行为的问题,也不是 PHP 包含方式的问题,也不是 textarea 本身的问题。 POSTed textarea 是如何处理的?
  • 以下是 POST 的处理方式:$block = stripslashes($_POST["page"]);
  • 还是想不通,其他人有什么想法吗?它似乎只发生在某些服务器上。其他人只是保存文本区域而没有问题。

标签: php parsing content-management-system textarea


【解决方案1】:

简单的方法:

1) 添加和剥离斜线

$loadblock = addslashes($_POST['page']);
$loadblock = stripslashes($loadblock);

2) HTML 实体

$loadblock = htmlentities($loadblock);

这是您可以做到的两种简单方法,这只是为了让您了解一两种基本方法。 :)

【讨论】:

  • 感谢您的回复,但不幸的是,这些都不起作用。提交表单时它仍在解析 PHP。
  • 我还是个白痴!在所有 php 的末尾,在 ?> 之前 - 放 } 并在我的其他代码的末尾,在它的 ?> 之前,添加 else{
  • 嗯,这可能是另一个帖子吗?我的问题似乎没有意义?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-29
  • 1970-01-01
  • 2010-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多