Как избежать содержимого, которое может содержать кавычки?

Я хочу зафиксировать свои условия поиска и передать их переменной JavaScript, но я не знаю, как обрабатывать кавычки, которые могут появиться.

Вот что у меня есть сейчас:

var searchTerms = "<!--#echo var = "terms"-->";
var pattern = / /g;
newSearchTerms = searchTerms.replace(/[^a-zA-Z 0-9]+/g,'');
var searchStr=newSearchTerms.replace(pattern,"_");

Меня беспокоит, что если «термины» будут содержать двойные кавычки (или апострофию, если я использую одинарные кавычки в JS), моя функция не сработает.

Как мне избежать строки до того, как она попадет в скрипт?

Спасибо,
Стив


Правка / ответ: в итоге я сделал это, переместив это во внешний скрипт, который захватил и проанализировал строку запроса, а не отображал ее в HTML.

Поведение ключевого слова "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
857
3

Ответы 3

Если terms содержит кавычки, то к тому времени, когда вы сделаете var searchTerms = "<!--#echo var = "terms"-->";, уже слишком поздно заменять любые кавычки, ваш JavaScript будет недействительным. Например, если terms содержит Это "термины", ваш JavaScript будет выглядеть следующим образом (и вызовет синтаксическую ошибку в браузере):

var searchTerms = "These are the "terms"";

Если вы уверены, что terms содержит только двойные кавычки, вы можете сделать:

var searchTerms = '<!--#echo var = "terms"-->';

Если он может содержать как одинарные, так и двойные кавычки, вам необходимо очистить вывод на сервере с помощью серверной технологии, более сложной, чем <!--#echo var = "..."-->.

В качестве альтернативы, я думаю, вы можете установить для переменной значение '"' в JavaScript. Пример: var DoubleQuotes = '"' var searchTerms = "<! - # echo var = " + DoubleQuotes + "terms" + DoubleQuotes + "-> "; Это полезно при обфускации.

Dalin Seivewright 18.12.2008 22:22

Я не думаю, что сервер обработает этот оператор, как показано. Хотя я мог ошибаться.

Grant Wagner 18.12.2008 22:24

@Dalin - Я не могу представить, чтобы сервер мог с этим справиться, но меня интересует идея, что вы можете установить DoubleQuotes. Могу ли я прочитать это в значении, что я могу сделать: DoubleQuotes = '"'; var searchTerms = DoubleQuotes + <! - # echo var = " terms "-> + DoubleQuotes;

Steve Perks 18.12.2008 22:38

DQ = '"'; var searchTerms = DQ + <! - # echo var = " terms "-> + DQ; не будет работать. Учитывая ту же строку выше, вы получите var searchTerms = '" '+ Это "термины" +' "'; Результат #echo недействителен JavaScript, вы все равно получите синтаксическую ошибку на стороне клиента.

Grant Wagner 19.12.2008 00:29

Я бы добавил javascript в событие onchange для текстового поля поиска. зафиксируйте нажатие клавиши и игнорируйте кавычки и любые другие специальные символы, которые могут быть введены. если ввод поступает со стороны сервера, продезинфицируйте его перед отправкой в ​​ваш скрипт.

Из вашего кода похоже, что вы используете Apache SSI. echo SSI имеет атрибут encoding, который позволяет вам указывать кодировку в стиле URL. Вы можете закодировать кавычки таким образом и просто расшифровать в Javascript с помощью unescape().

Попробуй это:

var terms = "<!--#echo encoding = "url" var = "terms"-->";
terms = unescape(terms)

Извините, Триптих, но это не работает с моей настройкой SSI, хотя я думаю, что мне придется пойти по этому пути (если я не смогу извлечь больше пользы из комментария Далина)

Steve Perks 18.12.2008 22:49

обратите внимание, что порядок важен; атрибут "encoding" ДОЛЖЕН стоять перед атрибутом "var".

Triptych 18.12.2008 22:58

да - скопировал дословно. На нашем сервере включено минимальное количество вещей.

Steve Perks 18.12.2008 23:04

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