#javascript #php #jquery
#javascript #php #jquery
Вопрос:
У меня есть кнопка с функцией onclick, где я отправляю несколько переменных php в свою функцию javascript. Все это работает нормально, за исключением случаев, когда у меня есть ‘ в тексте.
Итак, у меня была бы кнопка
<button onclick="selected_comp('" . preg_replace("/r|n/", "", $comp_row['comments']) . "')"
тогда у меня была бы функция
function selected_comp(comments){
console.log(comments);
}
Я пробовал preg_replace и json_encode, но оба выдают мне ошибки (json_encode выдает мне ошибку в целом, а с preg_replace это работает большую часть времени, но всякий раз, когда этот символ находится внутри комментариев, он не работает. Как я могу убедиться, что это обрабатывается как обычный текст, независимо от того, какой символ находится внутри.
ошибка: (индекс): 1 Неперехваченная синтаксическая ошибка: недопустимый или неожиданный токен
Ответ №1:
Исходя из того, как написан ваш PHP-код, если текст в $comp_row['comments']
text
, то результирующий JS-код будет
<button onclick="selected_comp('text')">
(где я добавил <
и >
для ясности).
Теперь, если текст есть text with ' embedded
, это приведет к
<button onclick="selected_comp('text with ' embedded')">
Тогда вы ясно видите, почему он выдает ошибку.
Существует множество различных решений, позволяющих избежать этого, например, предложенное @Terminus .
Но, возможно, это нелегко применить без глубокого изменения структуры вашего PHP-скрипта.
Итак, вот предложение, которое может показаться немного странным, но продолжает использовать вашу текущую организацию кода:
button onclick="selected_comp('" .
str_replace(["r", "n", "'"], ["", "", "\'"], $comp_row['comments']) .
"')"
Сначала вы можете заметить, что я перешел с preg_replace()
на str_replace()
(в любом случае preg_replace()
, это уже перебор).
И дело в том, что теперь не только r
и n
заменяются на «ничего», но и '
экранируются.
Ответ №2:
Если вы хотите, чтобы ваша строка была допустимой строкой javascript, которую вы можете использовать внутри своего кода javascript (в вашем примере — передать строку selected_comp
функции), вы должны:
- Убедитесь, что в вашей строке нет разрывов строк.
- Убедитесь, что в вашей строке нет кавычек (обратите внимание, здесь это зависит от кавычек, которые вы используете в своем коде — одинарные / двойные).
Таким образом, вы можете:
str_replace(["r", "n"], ['r', 'n'], $comp_row['comments']);
str_replace("'", "\'", $comp_row['comments']);
И в вашем коде:
<button onclick="selected_comp('".
str_replace("'", "\'",
str_replace(["r", "n"], ['r', 'n'], $comp_row['comments'])
) .
"')"
Я использовал '
, потому что вы использовали ее в своей исходной функции.