在输入的文本中停止html

时间:2013-10-14 11:52:35

标签: javascript php jquery html

大家好我意识到这是一个很多东西,我已经看了很多不同的帖子和答案,试着找到我自己的答案,然后在这里发帖,但是我真的很难得到以下上班。

我正在制作聊天室,如果您在文本框中键入文本,然后单击输入密钥ID为30,则发送消息(这是正常的功能)。但是,如果要在文本框中键入html,则会在发送消息时发生html。这在我的项目进展中造成了很大的问题。那里有很多帖子说使用......

htmlspecialchars();

我发现消息甚至到达我的PHP文件之前,在单击的输入键上已经在文本框中输入了html。我现在正试图找到一些我可以在javascript部分中执行的操作,我可以在输入时停止文本并对文本框进行调整,以便我输入以下密钥....

<   //which has the key ID of 60

然后它将在文本框中替换为/&lt;或者甚至在按键功能发生时不断检查和替换文本框中的html字符,然后替换它们。这意味着当我从文本框中取出文本时,它已经被解码,并且消息中没有html标签,这将阻止它们在我的聊天室中生效。

如下代码......

$("#messagearea").keydown(function{
    var replacementtext = this.replace() // html characters I'm not that familiar with        this function but I believe it is what I need to use.
    messagearea = replacementtext
}

上面的内容将允许我检查每次有按键事件时输入的字符,并阻止html在我的网站上搞砸。如果有人能给我一些关于如何写这个或者有更好的方法这样做的帮助?非常感谢。

1 个答案:

答案 0 :(得分:2)

你的问题非常普遍,jQuery的优秀人员已经为你解决了这个问题。

var encodedText = $("#message-box").text();

请查看the jQuery documentation深入讨论文本功能。


好的,让我延长答案,因为Dave的评论。关于如何实现我认为戴夫的意思的超基本示例。

您的HTML:

<!doctype html>
<html>
<head>
  <title>Chat</title>
  <style>.invalid{border:red}</style>
</head>
<body>
  <div id="chat">
    <p><span class="user">Foo:</span> Bar</p>
  </div>
  <form id="message-form" action="/chat.php" method="post">
    <textarea id="message" name="message" placeholder="Enter chat message ..." autofocus></textarea>
    <input type="submit" value="Send">
  </form>

你的jQuery:

$(function () {
  var $chat = $('#chat');
  var $messageForm = $('#message-form');
  $messageForm.$message = $('#message');
  $('#message-form').submit(function (e) {
    e.preventDefault();
    this.originalMessage = this.$message.val();
    this.$message.val('').prop('disabled', true);
    $.post('/chat.php', { json: true, message: this.originalMessage }, function (response) {
      if (response.error) {
        $messageForm.$message
          .val($messageForm.originalMessage)
          .addClass('invalid')
        ;
      }
      else {
        $chat.append('<p><span class="user">' + response.name + ':</span> ' + response.message + '</p>');
      }
      $messageForm.$message.prop('disabled', false).focus();
    }, 'json');
  });
});

你的PHP:

<?php

$json = filter_input(INPUT_POST, "json", FILTER_VALIDATE_BOOLEAN);

if (($message = filter_input(INPUT_POST, "message", FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW|FILTER_REQUIRE_SCALAR)) !== false) {
  session_start();
  $return = [
    "name" => $_SESSION["name"],
    "message" => htmlspecialchars($message, ENT_QUOTES|ENT_HTML5),
  ];
}
else {
  $return = [ "error" => true ];
}

if ($json === true) {
  header("content-type: application/json");
  exit(json_encode($return));
}

var_dump($return);

?>