當我的PHP腳本從AJAX POST請求接收數據時,$_POST
變量會被轉義。真奇怪的是,這隻發生在我的生產服務器上(在Linux上運行PHP 5.2.12),而不是在本地服務器上(在Windows上運行PHP 5.3.1)。
這裏是AJAX代碼:
var pageRequest = false;
if(window.XMLHttpRequest) pageRequest = new XMLHttpRequest();
else if(window.ActiveXObject) pageRequest = new ActiveXObject("Microsoft.XMLHTTP");
pageRequest.onreadystatechange = function() { }
var q_str = 'data=' + " ' ";
pageRequest.open('POST','unnamed_page.php',true);
pageRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
pageRequest.setRequestHeader("Content-length", q_str.length);
pageRequest.setRequestHeader("Connection", "close");
pageRequest.send(q_str);
沒有任何理由,這是怎麼回事?我應該如何解決這個問題,以便它可以在兩臺服務器上運行?
編輯:我對magic_quotes的以下設置:
Local Master
magic_quotes_gpc On On
magic_quotes_runtime Off Off
magic_quotes_sybase Off Off
這不會破壞我的本地服務器?只是想確保我得到這個...... – 2010-03-22 23:28:44
@George如果你按照描述進行檢查,它將與你的本地服務器一起工作,因爲'get_magic_quotes_gpc()'將在那裏返回false,並且沒有斜線將被剝離。嘗試一下,做一個測試輸出的函數,但最好的辦法是禁用linux機器上的魔術引號,你可以做一個'phpinfo()',它會告訴你什麼是啓用的,哪些不是。 – 2010-03-22 23:31:03
@George這是一個安全措施,通過用斜槓自動轉義相關數據來防止SQL注入。基本上不是一個壞主意,但它從來沒有抓到過並且最終成爲您的案例所展示的麻煩。 – 2010-03-22 23:32:18