Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как передать функции разделитель полей? (https://javascript.ru/forum/misc/77254-kak-peredat-funkcii-razdelitel-polejj.html)

javascript_pupil 11.04.2019 09:09

Как передать функции разделитель полей?
 
Есть следующий код:

onchange="submitForm('csv_table', 'csv_table.cgi', this.value, 'file.csv', ';')"

и дальше
function submitForm(par1, par2, par3, par4, par5, par6) {
...
}


Доходит всё, кроме точки с запятой. Как я понимаю, она воспринимается программой как разделитель полей и поскольку за ней нет ничего - приходит "пусто".

Идеальным вообще был бы вариант, когда всё это можно было бы упаковать в массив, например, как это делается на Perl:
@args = ($a, $b, $c);
system @args;

И дальше уже не твоя забота экранировать значения.

Dilettante_Pro 11.04.2019 12:52

И точка с запятой доходит:)
<input onchange="submitForm('csv_table', 'csv_table.cgi', this.value, 'file.csv', ';')">
<script>
function submitForm(par1, par2, par3, par4, par5, par6) {
   alert(par5);
}
</script>

javascript_pupil 11.04.2019 17:09

Спасибо! Я понял, косяк где-то в этих строчках в function submitForm:

req.open('POST', par2, true);
req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
req.send("var1=" + par3 + "&var2=" + par4 + "&var3=" + par5 + "&var4=" + par6);


Когда у нас в параметре "par5" находится ";" (точка с запятой), то cgi скрипт на том конце трактует её как и "&" - как разделитель переданных значений, а не как значение.

Тогда вопрос: как скрипту передавать ";"?

javascript_pupil 11.04.2019 17:55

Я сделал "костыли" и сейчас всё работает, но желательно бы как-то во всех этих параметрах "par + цифра" производить замену всех возможных "Percent-encoding reserved characters", а не только ";" на "%3B".

Может быть кто-то из гуру подскажет? А то у меня с Javascript дружба слабая.

Malleys 11.04.2019 18:00

Вы следуете использовать процентную кодировку для каждой части


Пишите
encodeURIComponent(par5)

вместо
par5


Часовой пояс GMT +3, время: 08:00.