0

大家好,我意识到这是一个经常出现的问题,我查看了大量不同的帖子和答案,试图找出我自己的答案,然后才费心在这里发帖,但是我真的很难让以下工作正常进行。

我正在做一个聊天室,如果你在文本框中输入文本然后点击输入键 id 30 则发送消息(这是正常功能)。但是,如果您要在文本框中键入 html,则 html 将在发送消息时生成。这在我的项目进展中造成了很大的问题。有很多帖子说使用...

htmlspecialchars();

我发现在消息到达我的 PHP 文件之前,在文本框中输入的 html 已经发生在被点击的 enter 键上。我现在正试图在 javascript 部分中找到我可以做的事情,我可以在输入文本时停止文本并调整文本框,所以如果我要输入以下键......

<   //which has the key ID of 60

然后它会在文本框中将其替换为 /< ,甚至在按键功能发生时不断检查和替换文本框中的 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 在我的网站上被弄乱。如果有人可以就如何编写或者是否有更好的方法可以给我一些帮助?非常感谢。

4

1 回答 1

2

你的问题很常见,jQuery 的大佬已经为你解决了。

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

查看jQuery 文档以深入讨论 text 函数。


好的,由于戴夫的评论,让我扩展我的答案。关于如何实现我认为戴夫的意思的超基本示例。

您的 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);

?>
于 2013-10-14T12:02:56.683 回答