限制textarea输入中的某些字符?

时间:2015-07-07 22:09:22

标签: html

我在网页上有一个textarea,我想这样做,以便人们不能放置某些字符,如&,*,<,或>在里面。有什么办法可以用html做到吗?如果没有,我也可以使用PHP。

2 个答案:

答案 0 :(得分:7)

您可以创建一个Javascript语句,用textarea内的空字符串替换所有不需要的字母。例如,如果您想限制问题中提到的字符,下面的代码就会很好:

<textarea rows="4" cols="50" onkeyup="this.value = this.value.replace(/[&*<>]/g, '')"></textarea>

这是 JSFiddle http://jsfiddle.net/81ox0vbr/6/

答案 1 :(得分:6)

如果您使用的是input,那么type属性可以为您提供多种选项,例如color, date, email, number, tel。请参阅https://developer.mozilla.org/en/docs/Web/HTML/Element/Input

使用textarea您没有这些选项。但是,您可以使用JavaScript来监听关键事件并忽略某些按键操作。请参阅http://jsfiddle.net/tg300eef/

var ta = document.getElementById("ta");
ta.addEventListener(
    'keypress',
    function (e) {
        // Test for the key codes you want to filter out.
        if (e.keyCode == 60) {
            alert('No "<"!');
            // Prevent the default event action (adding the
            // character to the textarea).
            e.preventDefault();
        }
    }
);

然而,这并不能保护您免受错误或恶意输入的侵害。也就是说,即使你使用JavaScript来过滤textarea中的字符,用户仍然可以绕过这个限制(例如,关闭JavaScript)。

处理必须在其他命令中使用的用户输入的正确方法 - 例如SQL查询或HTTP请求等 - 是使用适当的转义例程。这可能是mysqli_real_escape_string用于MySQL查询,htmlspecialchars用于在HTML中嵌入用户输入,urlencode用于HTTP请求,等等。这必须由服务器完成,因为您无法信任客户端(换句话说,用户)为您执行此操作。

有时您会看到删除特殊字符或术语的剥离例程。这些可能更难以正确,特别是当你试图允许一些特殊条款而不是其他条款时。这种情况通常发生在您要删除<script><iframe>之类的内容的HTML中,但会留下诸如<strong><h1>之类的内容。另一个例子是允许用户使用SQL的子集来过滤搜索结果。

剥离的问题在于,解释器(任何语言 - 你没有写过)都可能识别出你没有预料到的命令或语法,并通过那些你有安全漏洞的语言。这是使用Markdown等限制语言有意义的一个原因,即使HTML可以做同样的事情也是如此。

剥离的另一个问题是用户可能想要将特殊字符或短语用于其他目的,而不是作为指令。例如,我可能想要编写0 < x > 10但HTML剥离器可能会将此问题简化为0 10