代码之家  ›  专栏  ›  技术社区  ›  Elle H

文本区域内的XHTML和代码

  •  5
  • Elle H  · 技术社区  · 18 年前

    在我的一个使用textarea进行提交的站点上,我有一些代码,这些代码可能会出现以下内容:

    <textarea><p>text</p></textarea>
    

    line 88 column 50 - Error: document type does not allow element "p" here
    

    如果这不是一个有效的方法,那么期望得到什么?我可以使用onload JavaScript事件来解决问题,但这似乎是不必要的。无论如何,这不会影响输出,但我宁愿我的网站验证。

    6 回复  |  直到 18 年前
        1
  •  8
  •   Owen Ryan Doherty    18 年前

    你有什么理由要把一个 <p> 在内部 <textarea> ? 你发现这是无效的。如果出于显示目的(即显示代码),则应翻译:

    <textarea>&lt;p&gt;text&lt;/p&gt;</textarea>
    

    除了验证问题之外,允许显示任意标记(没有像上面那样正确编码)可能是一个巨大的安全问题。最重要的是确保用户提供的任何输入在显示之前都经过适当的消毒。

        2
  •  3
  •   nickf    18 年前

    您可以选择CDATA区域吗?

    <textarea><![CDATA[
        <p>Blah</p>
    ]]></textarea>
    
        3
  •  1
  •   Ross    18 年前

    我认为你试图制作一个所见即所得编辑器,比如TinyMCE,对吗?似乎最常用的方法是在中使用HTML实体 textarea 并通过JavaScript将其转换为HTML。

        4
  •  0
  •   acrosman    18 年前

    您可以在文本区域中省去标记,如果需要新行,请使用\n否则请使用 &lt;p&gt; &lt;/p&gt; 在你的标签的地方。

        5
  •  0
  •   Dbassx Dbassx    18 年前

    您可以使用onload函数替换textarea内容的开始和结束标记。

    eg: replace < > with &lt; &gt;
    
    <textarea cols="" rows="">&lt;p&gt;text&lt;/p&gt;</textarea>
    

    <p>文本</p>

        6
  •  0
  •   jon jon    17 年前

    您可以对发布的数据使用此功能

    function clean_data($value) {
        if (get_magic_quotes_gpc()) { $value = stripslashes($value); }
        $value = addslashes(htmlentities(trim($value)));
        $value = str_replace("\'", "&#39;", $value);
        $value = str_replace("'", "&#39;", $value);
        $value = str_replace(":", "&#58;", $value);
        return $value;
    }