如何在textarea中将HTML解释为纯文本?

时间:2017-03-04 09:08:59

标签: php html

我正在尝试制作在线代码编辑器,这样我就不必每次都将修改过的文件上传到网站。要编辑文件的内容,代码将获取其内容并将其以文本形式放入textarea中,如下所示:

<textarea id="text" name="contents">
<?php 
    include_once "useful.php";
    if(isset($_GET["url"])){
        echo file_get_contents($_GET["url"]);
    } 
?>
</textarea>

问题如下:

如果文件里面有</textarea>标签,则关闭我的textarea标签关闭而不显示整个文件。

有一个简单的解决方案可以解决这个问题吗?先感谢您。 :)

2 个答案:

答案 0 :(得分:2)

htmlspecialchars功能将解决您的问题。

此代码可以满足您的需求:

<textarea>
<?php
    //Fake file content
    $fileContent = "</textarea> with something";
    print htmlspecialchars($fileContent);
?>
</textarea>

答案 1 :(得分:0)

html_entity_decode()和一些括号转换使我能够在<{i} <textarea></textarea>块中显示HTML代码<textarea>

这是我在这里的第一个回复,所以请善待。 :)

我必须修复一个PHP文本文件编辑器,它将在<textarea></textarea>窗口中输出其文件内容 - 但是,如果它读取的文件包含 <textarea></textarea>块,输出窗口将关闭块并将其解释为HTML并关闭</textarea>,文件的其余部分将不会显示在编辑器窗口中。

(换句话说,它是一个PHP脚本,可以加载文件并在<textarea></textarea>窗口中显示其内容以进行编辑等。)

即。包含的文件:

Enter stuff here: <textarea name="blah"></textarea> Yay Stuff.

显示为:

Enter stuff here: <textarea name="blah">(缺少所有其他内容!)

需要两种类型的解释。

对于 PHP 文件:

在通过本网站的帮助击败自己之后,我能够通过首先将结尾</textarea>转换为&lt/textarea&gt来“清理”该块来欺骗翻译。

例如: ($ Body只是要在编辑器中显示的文件的内容)

//if reading a <textarea block of code
if (preg_match("%<textarea%/i",$Body)) {

  //turn < > into &lt &gt for the end of textarea block
  $Body=preg_replace("%</textarea>%/i","&lt/textarea&gt", $Body);

  //sanitize (this is the output window where the file content goes)
  print html_entity_decode("</font><textarea>" .$Body. "</textarea>\n");
}

这允许窗口正确输出文件内容,例如:

Enter stuff here: <textarea name="blah"></textarea> Yay stuff。

对于非PHP 文件(如HTML):

您必须搜索</textarea>,然后才能使用".$Body."

$filetype=pathinfo($File);
$filetype['extension'];
$php_files=Array('php','php3','php5');
if (!in_array($filetype['extension'], $php_files)) {  

$Body=preg_replace("%</textarea>%/i","&lt/textarea&gt", $Body);
  echo "</font><textarea> ".$Body." </textarea>\n";  
}

注意:如果PHP文件没有包含<textarea>,则可以使用:     print html_entity_decode($Body)我也必须同意这一点。

注2: 我正在显示PHP 5+代码,但是我必须为PHP 5执行此操作,并且只是FYI它可以正常使用eregi()和eregi_replace()

它让我很生气,所以我希望这可以帮助别人。 ......疯了,我又回来了,更新了我的答案。 :)