Привет всем, я понимаю, что это то, что возникает часто, и я просмотрел множество разных сообщений и ответов, чтобы попытаться найти свой собственный ответ, прежде чем утруждать себя публикацией здесь, однако я действительно изо всех сил пытаюсь заставить работать следующее.
Я в процессе создания комнаты чата, если вы введете текст в текстовое поле, затем щелкните идентификатор ключа ввода 30, тогда сообщение будет отправлено (это нормальная функция). Однако, если вы должны ввести html в текстовое поле, тогда HTML будет иметь место при отправке сообщения. Это вызывает большие проблемы в развитии моего проекта. Есть много сообщений, в которых говорится, что использовать ...
htmlspecialchars();
Я обнаружил, что еще до того, как сообщения достигли моего файла PHP, HTML, введенный в текстовое поле, уже имел место при нажатии клавиши ввода. Теперь я пытаюсь найти что-то, что я могу сделать в разделе 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 на моем сайте. Если бы кто-нибудь мог мне помочь в том, как это должно быть написано, или есть ли лучший способ сделать это? Это было бы большое спасибо.
1 ответ
Ваша проблема настолько распространена, что отличные ребята из jQuery уже решили ее за вас.
var encodedText = $("#message-box").text();
Взгляните на документацию jQuery для более подробного обсуждения текстовой функции.
Хорошо, позвольте мне расширить свой ответ из-за комментариев Дэйва. Ультра простой пример того, как достичь того, что, я думаю, имел в виду Дейв.
Ваш 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);
?>
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Имейте в виду, что JavaScript — это НЕ то же самое, что Java! Включите все ярлыки, относящиеся к вашему вопросу; например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [svelte] и т. д.
this.replace(/<(?:.|\n)*?>/gm, '');