Я хочу зафиксировать свои условия поиска и передать их переменной 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.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Если terms содержит кавычки, то к тому времени, когда вы сделаете var searchTerms = "<!--#echo var = "terms"-->";, уже слишком поздно заменять любые кавычки, ваш JavaScript будет недействительным. Например, если terms содержит Это "термины", ваш JavaScript будет выглядеть следующим образом (и вызовет синтаксическую ошибку в браузере):
var searchTerms = "These are the "terms"";
Если вы уверены, что terms содержит только двойные кавычки, вы можете сделать:
var searchTerms = '<!--#echo var = "terms"-->';
Если он может содержать как одинарные, так и двойные кавычки, вам необходимо очистить вывод на сервере с помощью серверной технологии, более сложной, чем <!--#echo var = "..."-->.
Я не думаю, что сервер обработает этот оператор, как показано. Хотя я мог ошибаться.
@Dalin - Я не могу представить, чтобы сервер мог с этим справиться, но меня интересует идея, что вы можете установить DoubleQuotes. Могу ли я прочитать это в значении, что я могу сделать: DoubleQuotes = '"'; var searchTerms = DoubleQuotes + <! - # echo var = " terms "-> + DoubleQuotes;
DQ = '"'; var searchTerms = DQ + <! - # echo var = " terms "-> + DQ; не будет работать. Учитывая ту же строку выше, вы получите var searchTerms = '" '+ Это "термины" +' "'; Результат #echo недействителен JavaScript, вы все равно получите синтаксическую ошибку на стороне клиента.
Я бы добавил javascript в событие onchange для текстового поля поиска. зафиксируйте нажатие клавиши и игнорируйте кавычки и любые другие специальные символы, которые могут быть введены. если ввод поступает со стороны сервера, продезинфицируйте его перед отправкой в ваш скрипт.
Из вашего кода похоже, что вы используете Apache SSI. echo SSI имеет атрибут encoding, который позволяет вам указывать кодировку в стиле URL. Вы можете закодировать кавычки таким образом и просто расшифровать в Javascript с помощью unescape().
Попробуй это:
var terms = "<!--#echo encoding = "url" var = "terms"-->";
terms = unescape(terms)
Извините, Триптих, но это не работает с моей настройкой SSI, хотя я думаю, что мне придется пойти по этому пути (если я не смогу извлечь больше пользы из комментария Далина)
обратите внимание, что порядок важен; атрибут "encoding" ДОЛЖЕН стоять перед атрибутом "var".
да - скопировал дословно. На нашем сервере включено минимальное количество вещей.
В качестве альтернативы, я думаю, вы можете установить для переменной значение '"' в JavaScript. Пример: var DoubleQuotes = '"' var searchTerms = "<! - # echo var = " + DoubleQuotes + "terms" + DoubleQuotes + "-> "; Это полезно при обфускации.