Как извлечь реальное значение из символов html в jsx?

#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. Да. результат должен быть тем же. В любом случае спасибо за совет. Я тоже попробую использовать функциональный компонент и посмотрю, работает ли он.