【问题标题】:How to interpret HTML as plain Text inside textarea?如何将 HTML 解释为 textarea 中的纯文本?
【发布时间】:2017-03-04 09:08:58
【问题描述】:

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

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

问题如下:

如果文件里面有一个&lt;/textarea&gt; 标签,这会关闭我的textarea 标签关闭而不显示整个文件。

有没有简单的解决方案来解决这个问题?先感谢您。 :)

【问题讨论】:

  • 试试htmlspecialchars函数,如果它可以解决你的问题。
  • @tilz0R 感谢您的回复。问题是我想完全按照保存在驱动器上的方式显示文件。
  • 所以我的评论没有解决问题?
  • btw textarea 将其中的 html 解释为纯文本
  • @Dherya 是的,但&lt;/textarea&gt; 除外,它指示何时应关闭此标签

标签: php html


【解决方案1】:

htmlspecialchars 函数将解决您的问题。

这段代码做你想做的事:

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

【讨论】:

  • 哇,这确实有效。 MyExample。我正在阅读这个PHP Manual,上面写着这个&lt;?php $new = htmlspecialchars("&lt;a href='test'&gt;Test&lt;/a&gt;", ENT_QUOTES); echo $new; // &amp;lt;a href=&amp;#039;test&amp;#039;&amp;gt;Test&amp;lt;/a&amp;gt; ?&gt;,所以我认为这行不通
  • 它确实会。
  • 谢谢!我正在转向支持
【解决方案2】:

html_entity_decode() 和一些括号转换使我能够显示 HTML 代码 &lt;textarea&gt;&lt;/textarea&gt; within &lt;textarea&gt; 块。

这是我在这里的第一次回复,所以请多多关照。 :)

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

(换句话说,它是一个 PHP 脚本,它加载文件并将其内容显示在 &lt;textarea&gt;&lt;/textarea&gt; 窗口内以进行编辑等)

即包含的文件:

Enter stuff here: &lt;textarea name="blah"&gt;&lt;/textarea&gt; Yay Stuff.

它显示为:

Enter stuff here: &lt;textarea name="blah"&gt;(缺少所有其他内容!)

需要两种类型的解释。

对于 PHP 文件:

在殴打自己并在此站点的帮助下,我能够通过首先将结尾 &lt;/textarea&gt; 转换为 &amp;lt/textarea&amp;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: &lt;textarea name="blah"&gt;&lt;/textarea&gt; 好东西。

对于 非 PHP 文件(如 HTML):

你必须搜索&lt;/textarea&gt;并且可以使用".$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 文件不包含&lt;textarea&gt;,则可以使用: print html_entity_decode($Body) 我也不得不为此奋斗。

注2: 我正在显示 PHP 5+ 代码,但我必须为 PHP 5 执行此操作,仅供参考,它适用于 eregi() 和 eregi_replace()

这让我发疯了,所以我希望这对其他人有帮助。 ......太疯狂了,我再次回来并更新了我的答案。 :)

【讨论】:

  • 是的,除了 html_entities_decode() 做相反的事情...您需要 htmlentities() 将字符从
  • 我阐明了用途。如果正在读取的文件是带有 PHP 的 HTML、带有 HTML 的 PHP(使用 &lt;textarea&gt;)或带有 HTML 的 PHP(没有 &lt;textarea&gt;htmlentities() 仅在读取到 $Body 的文件是非PHP 文件——否则我必须使用 html_entities_decode().
  • 我知道它已经过时了,但我更新了我的答案——对于非 PHP/HTML 文件,我只使用了 ".$Body."
猜你喜欢
  • 2014-02-07
  • 1970-01-01
  • 2013-01-21
  • 1970-01-01
  • 2014-09-10
  • 1970-01-01
  • 2014-07-18
  • 2010-09-22
  • 2015-09-08
相关资源
最近更新 更多