Как использовать строку в функции JavaScript

у меня есть кнопка

onclick = "click(' . $item . ');"

тогда функция javascript должна передать $item на другую страницу. Это работает нормально, если $item — это число, но не если это строка, а иногда это смесь символов и цифр, которую я не могу контролировать.

function click(c)
{
var u = "items.php?serial = " + c;
document.location.href = u;
}

Есть ли способ сделать это в JS?

не могли бы вы попробовать использовать var u = "items.php?serial = "+encodeURIComponent(u), это закодирует данные в u, подходящие для URL-адреса

Sanu Khan 10.08.2024 13:21

@SanuKhan это работает, если я использую +encodeURIComponent(c), спасибо. Дайте ответ, и я приму его

Kilisi 10.08.2024 13:30

Почему кнопка с прикрепленным JavaScript? Просто создайте гиперссылку, и она перейдет по указанному вами URL-адресу без необходимости использования какого-либо сценария. (И если вы хотите придать ссылке вид кнопки, вы можете легко сделать это с помощью CSS). Всегда будьте проще!

ADyson 10.08.2024 13:36

@ADyson, потому что JavaScript делает другие важные вещи, прежде чем дойти до этого момента.

Kilisi 10.08.2024 13:37

@Kilisi попробуйте использовать обратные кавычки (``)

Nalan PandiKumar 10.08.2024 14:01

@NalanPandiKumar Я не тот, кто задает вопрос

ADyson 10.08.2024 14:02

@ADyson извини за недоразумение.

Nalan PandiKumar 10.08.2024 14:04

Важно понимать, что побег — это не то, что вы можете сделать «раз и навсегда», а то, что вы делаете каждый раз, когда передаете что-то из одного контекста в другой. В этом случае вы переходите от PHP к JS, а затем от JS к URL-адресу, поэтому я связал два существующих ответа, охватывающих эти два шага. Вам необходимо применить оба типа экранирования в нужных местах вашего кода.

IMSoP 10.08.2024 14:38
Поведение ключевого слова "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) для оценки ваших знаний,...
2
8
57
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

onclick = "click(\'' . $item . '\');"

Экранированные кавычки — это то, что вам нужно.

он не дает мне действительный URL-адрес, он дает "items.php?serial = "%20+%20c"

Kilisi 10.08.2024 13:28

@Kilisi, можете ли вы добавить php-код, который создает кнопку в вашем сообщении, пожалуйста?

François Huppé 10.08.2024 13:31

Все в порядке, теперь это исправлено в функции js из комментария выше. Проголосовал за ваши усилия, поскольку вижу, что вы находитесь на другом пути, который тоже подойдет. Итак, я использовал ваш ответ и идею из комментария, и теперь это работает.

Kilisi 10.08.2024 13:33
Ответ принят как подходящий

Проблема в том, что $item может содержать контент, нарушающий вашу функциональность. У вас есть

onclick = "click(' . $item . ');"

но что, если $item это О'Брайан? В этом случае это переводится на

onclick = "click('O'Brian');"

Итак, что на самом деле происходит: вы должны передать строку click, которая равна O, но это не сработает. Видеть:

function click(c)
{
    var u = "items.php?serial = " + c;
    document.location.href = u;
}
<input type = "button" onclick = "click('O'Brian')" value = "something">

Вы получите жалобу на то, что скобка не закрывается, потому что после закрытия строки O она ожидает закрытия скобки функции, но вместо этого получает Брайана.

Поскольку предложенный encodeURIComponent является функцией Javascript (см. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent), которую вы должны использовать c в соответствии с предложением , это не решит вашу проблему само по себе. Прежде чем создавать структуру, вам понадобится что-то эквивалентное, которое будет выполнено PHP.

Это отличный ресурс для этого: Что является эквивалентом компонента encodeURI в PHP в JavaScript?

Это функция PHP, которая делает это для PHP:

function encodeURIComponent($str) {
    $revert = array('%21'=>'!', '%2A'=>'*', '%27'=>"'", '%28'=>'(', '%29'=>')');
    return strtr(rawurlencode($str), $revert);
}

и тогда вы можете сделать это:

onclick = "click(' . encodeURIComponent($item) . ');"

и тогда вам не нужно вызывать encodeURIComponent внутри вашей click функции, поскольку она уже обработана PHP

Очень подробно, спасибо

Kilisi 10.08.2024 14:12

Ваше объяснение блестяще, вплоть до той части, где вы начинаете говорить о кодировании URL, а это совершенно другой контекст. Поможет ли функция, которую вы даете, в примере О'Брайена? Как подсказывает остальная часть вашего ответа, ключевой момент не в URL-адресах, а в том, чтобы вы создали действительный исходный код JavaScript; Для этого можно использовать json_encode, потому что действительный JSON также является действительным исходным кодом JS.

IMSoP 10.08.2024 14:19

Эта строка позже используется в URL-адресе, но она находится в коде JS, поэтому можно использовать функцию JS encodeUriComponent. Всегда сопротивляйтесь искушению «предварительно избежать» контента для нескольких контекстов одновременно, вы просто запутаетесь.

IMSoP 10.08.2024 14:41

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