@Apexis

Как избежать преобразования url при отправке аяксом?

Отправляю данные (адрес страниц и их содержимое) на сервер через XMLHttpRequest(POST). Данные при отправке не искажаются, но когда приходят на сервер вместо точек в адресе стоит нижнее подчеркивание (F:\php\server\index\_php). Никаких преобразований не делаю, просто перебираю циклом. Как это можно поправить?

Функция, которая сохраняет страницы
public static function saveTemplate() 
	{
		$saveFail = [];
		foreach ($_POST as $key => $value) {
			if ($key == 'save') continue;
			//$key = preg_replace('/_(php|html|asp|css)/', '.$1', $key);
			//$value = preg_replace('/(?<=\<)!--(?=\?)|(?<=\?)--(?=\>)/', '', $value);
			if (!file_put_contents($key, $value)) $saveFail[] = $key;
		}
		return implode(', ', $saveFail);		
	}

controller.php
if (isset($_POST['save'])) die(!empty($status = Purity::saveTemplate())? (Translate::do("Ошибка при сохранении изменений") . ": " . $status) : Translate::do("Изменения сохранены"));

pageHistory.changedFiles.forEach(function(e,i) {								
			data.append(e, pageHistory.template[pageHistory.current][e]);
		});
		data.append('save', true);				

		ajax('POST', data, function() {			
			dialog(xhr.responseText);
			document.getElementById("page").contentWindow.onbeforeunload = null;
			setTimeout(function() {				
				//editor.location.reload();	
			}, 2000)				
		});
/* XHR */
function ajax(type, data, func) {
	var callback = func;
	if (type == 'GET') {
		xhr.open('GET', 'controller.php?' + data, true);
		xhr.send();
	} else if (type == 'POST') {
		xhr.open('POST', 'controller.php', true);
		xhr.send(data);
	}
	xhr.onreadystatechange = function() {
		if (xhr.readyState != 4) return;
		if (xhr.status == 403) {
			localStorage.removeItem('login');
			location.reload();
			return;
		} else if (xhr.getResponseHeader('purityError')) { 
			dialog('Error: ' + xhr.responseText);			
			return;
		} else if (xhr.status != 200) {
			dialog('Error: ' + xhr.status + ': ' + xhr.statusText);			
			return;
		} else if (callback) callback();		
	}
}

Заголовки:

Request URL: localhost/purity/controller.php
Request Method: POST
Status Code: 200 OK
Remote Address: [::1]:80
Referrer Policy: no-referrer-when-downgrade
Cache-Control: no-store, no-cache, must-revalidate
Connection: close
Content-type: text/html; charset=UTF-8
Date: Wed, 08 Aug 2018 11:34:43 +0000
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Host: localhost
Pragma: no-cache
Transfer-Encoding: chunked
X-Powered-By: PHP/7.1.11
Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7
Cache-Control: no-cache
Connection: keep-alive
Content-Length: 14916
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryERE3jxCD5OWjti7R
Cookie: PHPSESSID=a9t4eqiinkl2i3vmor67jb1ecv
Host: localhost
Origin: localhost
Pragma: no-cache
Referer: localhost/purity
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36
------WebKitFormBoundaryERE3jxCD5OWjti7R
Content-Disposition: form-data; name="F:\php\server\index.php"

<?php
include_once($_SERVER['DOCUMENT_ROOT']."/req/top.php");
?>

...
  • Вопрос задан
  • 157 просмотров
Решения вопроса 1
@Apexis Автор вопроса
Оказывается ключи массива не должны содержать точек, пробелов и др. Они автоматически преобразуются в нижнее подчеркивание. Ссылка
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
IceRD
@IceRD
попробуйте encodeURIComponent()
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы