Передача переменной URL с & из JS в PHP приводит к пропуску "&" - PullRequest
0 голосов
/ 31 декабря 2018

Мне немного трудно найти правильное название для этого вопроса, поэтому, возможно, этот пример прояснит мою проблему.

Я делаю ajax-запрос на передачу некоторых переменных из JS в PHP,Одной из этих переменных является URL с некоторыми параметрами, а именно:

https://www.wondermap.it/cgi-bin/qgis_mapserv.fcgi?map=/home/ubuntu/qgis/projects/Demo_sci_WMS/demo_sci.qgs&SERVICE=WFS&VERSION=1.1.0&REQUEST=GetFeature&TYPENAME=impianti_risalita&

. Код PHP игнорирует любые параметры после первого символа &, учитывая только эту часть

https://www.wondermap.it/cgi-bin/qgis_mapserv.fcgi?map=/home/ubuntu/qgis/projects/Demo_sci_WMS/demo_sci.qgs

.AJAX-запрос к PHP, который я сейчас делаю, выглядит так:

https://localhost/shire/php/export_wfs.php?wfs_url=https://www.wondermap.it/cgi-bin/qgis_mapserv.fcgi?map=/home/ubuntu/qgis/projects/Demo_sci_WMS/demo_sci.qgs&SERVICE=WFS&VERSION=1.1.0&REQUEST=GetFeature&TYPENAME=impianti_risalita&format=ESRI%20Shapefile

, являющийся wfs_url и format двумя параметрами, которые должен обрабатывать PHP.

Я думаю, что яя должен избегать размещения символов & в параметре wfs_url, но я понятия не имею, что мне делать вместо этого.Любая помощь будет оценена.

РЕДАКТИРОВАТЬ

Вот вызов AJAX:

var xhr;
if (window.XMLHttpRequest) xhr = new XMLHttpRequest(); // all browsers
else xhr = new ActiveXObject("Microsoft.XMLHTTP"); // for IE

// url is https://www.wondermap.it/cgi-bin/qgis_mapserv.fcgi?map=/home/ubuntu/qgis/projects/Demo_sci_WMS/demo_sci.qgs&SERVICE=WFS&VERSION=1.1.0&REQUEST=GetFeature&TYPENAME=impianti_risalita&
var php_url = window.location.protocol + "//" + window.location.hostname + '/shire/php/export_wfs.php?wfs_url=' + url + 'format=' + format_list[0];
xhr.open('GET', php_url, false);
xhr.onreadystatechange = function () {
    if (xhr.readyState===4 && xhr.status===200) {
        alert('Downloading...');
    }
}
xhr.send();

return false;
});

Ответы [ 2 ]

0 голосов
/ 31 декабря 2018

попробуйте включить эту функцию ( base64_encode ):

var php_url = window.location.protocol + "//" + window.location.hostname + '/shire/php/export_wfs.php?wfs_url=' + base64_encode(url) + 'format=' + base64_encode(format_list[0]);

и на стороне сервера:

$wfs_url = base64_decode($_GET['wfs_url']);
$format = base64_decode($_GET['format']);
0 голосов
/ 31 декабря 2018

Вот как отправить его как POST-запрос:

var php_url = '/shire/php/export_wfs.php';
var formData = new FormData();
formData.append('wfs_url', url);
formData.append('format', format_list[0]);
xhr.open('POST', php_url);
xhr.onreadystatechange = function () {
    if (xhr.readyState===4 && xhr.status===200) {
        alert('Server reply: ' + xhr.responseText);
    }
}
xhr.send(formData);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...