Страница 1 из 1
JS экранирование символов перед отправкой
Добавлено: 24 май 2025, 16:00
ya
Код: Выделить всё
// Получаем текст из переменной "вопрос"
var вопрос = getContactVariable("вопрос");
// Проверяем, есть ли текст в переменной "вопрос"
if (вопрос && typeof вопрос === "string" && вопрос.trim() !== "") {
// Экранируем все специальные символы
var экранированныйВопрос = вопрос
.replace(/\\/g, '\\\\\\\\') // Экранируем все обратные слэши
.replace(/"/g, '\\"') // Экранируем двойные кавычки
.replace(/'/g, "\\'") // Экранируем одиночные кавычки
.replace(/\n/g, "\\n") // Экранируем переносы строк
.replace(/\t/g, "\\t") // Экранируем табуляции
.replace(/\s+/g, ' ') // Заменяем все пробелы и переносы строк на один пробел
// Удаляем управляющие символы (например, символы управления ASCII)
.replace(/[\u0000-\u001F\u007F-\u009F]/g, "")
// Обрабатываем суррогатные пары (эмодзи и другие символы за пределами BMP)
.replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g, function(match) {
// Возвращаем экранированную версию суррогатной пары
var high = match.charCodeAt(0);
var low = match.charCodeAt(1);
// Формируем код точки Unicode
var codePoint = ((high - 0xD800) << 10) + (low - 0xDC00) + 0x10000;
return "\\u{" + codePoint.toString(16) + "}";
});
// Теперь переменная экранирована
// Вы можете использовать ее далее по необходимости
console.log(экранированныйВопрос);
}
Re: JS экранирование символов перед отправкой
Добавлено: 24 май 2025, 16:05
ya
Код: Выделить всё
class МойОбъект {
// Статическая переменная для хранения экземпляра
static #instance = null;
// Приватная переменная для хранения вопроса
#вопрос = "";
// Конструктор приватный (для предотвращения создания экземпляров вне класса)
constructor() {
if (МойОбъект.#instance) {
return МойОбъект.#instance;
}
МойОбъект.#instance = this;
}
// Приватный метод для экранирования строки
#экранироватьСтроку(входнаяСтрока) {
if (!входнаяСтрока || typeof входнаяСтрока !== "string") {
return "";
}
return входнаяСтрока
.replace(/\\/g, '\\\\\\\\') // Экранируем все обратные слэши
.replace(/"/g, '\\"') // Экранируем двойные кавычки
.replace(/'/g, "\\'") // Экранируем одиночные кавычки
.replace(/\n/g, "\\n") // Экранируем переносы строк
.replace(/\t/g, "\\t") // Экранируем табуляции
.replace(/\s+/g, ' ') // Заменяем все пробелы и переносы строк на один пробел
.replace(/[\u0000-\u001F\u007F-\u009F]/g, "") // Убираем управляющие символы
.replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g, function(match) {
// Обрабатываем суррогатные пары (эмодзи и другие символы вне BMP)
var high = match.charCodeAt(0);
var low = match.charCodeAt(1);
var codePoint = ((high - 0xD800) << 10) + (low - 0xDC00) + 0x10000;
return "\\u{" + codePoint.toString(16) + "}";
});
}
// Геттер для вопроса
get вопрос() {
return this.#вопрос;
}
// Сеттер для вопроса с автоматическим экранированием
set вопрос(значение) {
if (typeof значение === "string") {
this.#вопрос = this.#экранироватьСтроку(значение);
} else {
this.#вопрос = "";
}
}
// Статический метод для получения экземпляра
static getInstance() {
if (!МойОбъект.#instance) {
МойОбъект.#instance = new МойОбъект();
}
return МойОбъект.#instance;
}
}
// Использование
const singleton = МойОбъект.getInstance();
singleton.вопрос = getContactVariable("вопрос"); // Установка с автоматическим экранированием
console.log(singleton.вопрос); // Получение экранированного вопроса
Объяснение:
#экранироватьСтроку — приватный метод класса.
вопрос — приватная переменная с геттером и сеттером.
getInstance() — статический метод для получения единственного экземпляра класса (шаблон одиночка).
В сеттере происходит автоматическое экранирование строки при присвоении.