Замена непечатаемого символа ASCII, который не работает в рабочих заметках

Я пытаюсь добавить в рабочие заметки текст, который может содержать непечатаемые символы ASCII. Эти символы не заменяются должным образом перед сохранением в базе данных.

<work_notes>
TEST
X  000  000  0x00  00000000  NUL  (Null char.)
  001  001  0x01  00000001  SOH  (Start of Header)
  002  002  0x02  00000010  STX  (Start of Text)
  003  003  0x03  00000011  ETX  (End of Text)
  004  004  0x04  00000100  EOT  (End of Transmission)
  005  005  0x05  00000101  ENQ  (Enquiry)
  006  006  0x06  00000110  ACK  (Acknowledgment)
  007  007  0x07  00000111  BEL  (Bell)
  008  010  0x08  00001000   BS  (Backspace)
      009  011  0x09  00001001   HT  (Horizontal Tab)

  010  012  0x0A  00001010   LF  (Line Feed)
  011  013  0x0B  00001011   VT  (Vertical Tab)
  012  014  0x0C  00001100   FF  (Form Feed)

  013  015  0x0D  00001101   CR  (Carriage Return)
  014  016  0x0E  00001110   SO  (Shift Out)
  015  017  0x0F  00001111   SI  (Shift In)
  016  020  0x10  00010000  DLE  (Data Link Escape)
  017  021  0x11  00010001  DC1  (XON)(Device Control 1)
  018  022  0x12  00010010  DC2  (Device Control 2)
  019  023  0x13  00010011  DC3  (XOFF)(Device Control 3)
  020  024  0x14  00010100  DC4  (Device Control 4)
  021  025  0x15  00010101  NAK  (Negative Acknowledgement)
  022  026  0x16  00010110  SYN  (Synchronous Idle)
  023  027  0x17  00010111  ETB  (End of Trans. Block)
  024  030  0x18  00011000  CAN  (Cancel)
  025  031  0x19  00011001   EM  (End of Medium)
  026  032  0x1A  00011010  SUB  (Substitute)
  027  033  0x1B  00011011  ESC  (Escape)
  028  034  0x1C  00011100   FS  (File Separator)
  029  035  0x1D  00011101   GS  (Group Separator)
  030  036  0x1E  00011110   RS  (Request to Send)(Record Separator)
  031  037  0x1F  00011111   US  (Unit Separator)
</work_notes>

Квадрат, показанный в рабочих заметках, является фактическим символом, но здесь, в текстовой области, он не отображается.

Код, который я написал для замены символа Escape,

/**
 * Escape a string for XML.
 * @param {String} txt
 * @return {String}
 */
ImDataHelper.escapeXml = function (txt) {
  var str = txt;
  // Replace the escape character.
  txt = str.replace(/x1B/g,''); 
  // copied from SOAPMessage script include
  return Packages.org.apache.commons.lang.StringEscapeUtils.escapeXml(txt);
};

Результат выполнения этой транзакции выглядит следующим образом

<work_notes>2019-04-09 13:31:37 - Shaji Kalidasan (Work Notes)
TEST
X  000  000  0x00  00000000  NUL  (Null char.)
  001  001  0x01  00000001  SOH  (Start of Header)
  002  002  0x02  00000010  STX  (Start of Text)
  003  003  0x03  00000011  ETX  (End of Text)
  004  004  0x04  00000100  EOT  (End of Transmission)
  005  005  0x05  00000101  ENQ  (Enquiry)
  006  006  0x06  00000110  ACK  (Acknowledgment)
  007  007  0x07  00000111  BEL  (Bell)
  008  010  0x08  00001000   BS  (Backspace)
      009  011  0x09  00001001   HT  (Horizontal Tab)

  010  012  0x0A  00001010   LF  (Line Feed)
  011  013  0x0B  00001011   VT  (Vertical Tab)
  012  014  0x0C  00001100   FF  (Form Feed)

  013  015  0x0D  00001101   CR  (Carriage Return)
  014  016  0x0E  00001110   SO  (Shift Out)
  015  017  0x0F  00001111   SI  (Shift In)
  016  020  0x10  00010000  DLE  (Data Link Escape)
  017  021  0x11  00010001  DC1  (XON)(Device Control 1)
  018  022  0x12  00010010  DC2  (Device Control 2)
  019  023  0x13  00010011  DC3  (XOFF)(Device Control 3)
  020  024  0x14  00010100  DC4  (Device Control 4)
  021  025  0x15  00010101  NAK  (Negative Acknowledgement)
  022  026  0x16  00010110  SYN  (Synchronous Idle)
  023  027  0x17  00010111  ETB  (End of Trans. Block)
  024  030  0x18  00011000  CAN  (Cancel)
  025  031  0x19  00011001   EM  (End of Medium)
  026  032  0x1A  00011010  SUB  (Substitute)
  027  033  0  00011011  ESC  (Escape)
  028  034  0x1C  00011100   FS  (File Separator)
  029  035  0x1D  00011101   GS  (Group Separator)
  030  036  0x1E  00011110   RS  (Request to Send)(Record Separator)
  031  037  0x1F  00011111   US  (Unit Separator)
</work_notes>

Как видите, он заменил только «x1B» с «0x1B», но не фактический Escape-символ ASCII, показанный в квадрате.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
543
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно экранировать эти коды ASCII с помощью \ в регулярном выражении (в примере я записываю длину строки, потому что символ не отображается в консоли):

var str = String.fromCharCode(27) + '  027  033  0x1B  00011011  ESC  (Escape)';

console.info('length: ', str.length);

str = str.replace(/\x1B/g, '');

console.info('length: ', str.length);

См. в Regex101

ПРИМЕЧАНИЕ: Вы также можете использовать их в таком интервале: /[\x00-\x1F]/g

См. в Regex101

Другие вопросы по теме