#html #reactjs #jsx #special-characters
#HTML #reactjs #jsx #специальные символы
Вопрос:
У меня есть простая HTML-форма с вводом name="comment"
. Я отображаю результат с помощью jsx в приложении react с помощью {formData.comment}
.
Форма и результат отлично работают для обычного ввода, например hello world
, но для ввода специальных символов, например
that's
вывод thatamp;#x27;s
.
Как получить значение по мере его отправки в форму?
Ответ №1:
Вам придется заменить символьные объекты. Я не думаю, что есть собственный способ сделать это в Javascript (если да, то кто-нибудь, пожалуйста, прокомментируйте это или добавьте к нему ответ). Но, к счастью, сделать это вручную довольно просто:
// The list of characters to escape
const htmlEscapes = {
'amp;': 'amp;amp;',
'<': 'amp;<',
'>': 'amp;>',
'"': 'amp;quot;',
"'": 'amp;#x27;',
'/': 'amp;#x2F;'
};
// Sample string with an apostrophe character entity in it
let str = 'thatamp;#x27;s';
// Loop over the entities to escape and regex them out
Object
.entries(htmlEscapes)
.forEach(([plain, hexCode]) => str = str.replace(new RegExp(hexCode, 'g'), plain));
// String is now sanitized
console.log(str);
Это всего лишь один примерный способ сделать это, суть в том, что вам нужно будет обработать строку, чтобы заменить их
Комментарии:
1. Собственный способ сделать это было бы неплохо. Но это работает просто отлично. Спасибо за решение.
Ответ №2:
Как вы получили свои данные?
function Form() {
const [comm,setComm] = React.useState()
const submitHandler = e => {
e.preventDefault()
const data = new FormData(e.target)
setComm(data.get('comment'))
};
return (
<form onSubmit={submitHandler}>
<input
name="comment"
type="text"
/>
<button type="submit">
submit
</button>
<div>Result : {comm}</div>
</form>
);
}
Комментарии:
1. Я использую компонент класса. Но это очень похоже только на ваш код. Решает ли функциональный компонент саму проблему?
2. Функциональные компоненты имеют тот же способ рендеринга. Разница скорее в области действия функции. Но в этом примере компонент класса должен иметь тот же результат :-/
3. Да. результат должен быть тем же. В любом случае спасибо за совет. Я тоже попробую использовать функциональный компонент и посмотрю, работает ли он.