2012-11-21 51 views
2

這裏是源代碼:意外標記非法的JavaScript + PHP

$(document).ready(function(){ 

     $.post("scan.php?dir=<?=$_POST['dir']?>", function(data){ 

      alert(data); 

     }); 

    }); 

生成的代碼是:

$(document).ready(function(){ 

     $.post("scan.php?dir=C:\xampp\htdocs\windowsMedias\music", function(data){ 

      alert(data); 

     }); 

    }); 

但它不會工作(谷歌瀏覽器返回在標題中錯誤) 。

如果我手動添加生成的代碼,沒有PHP,它的工作原理。

有人知道如何解決它?

+0

您嘗試過哪些調試?你確定'$ _POST ['dir']'實際上是你發佈的字符串嗎? – David

+0

我不知道我要說什麼,但也許PHP或後代中的代碼沒有被解析,因爲他們只是字符串 – Virus721

+1

**你很容易受[XSS](http://en.wikipedia.org /維基/跨site_scripting)**。不要將外部數據注入到原始HTML文檔中。 – Quentin

回答

1

你必須來urlencode您的參數。

$.post("scan.php?dir=<?= urlencode($_POST['dir']) ?>", function(data){ 
    alert(data); 
}); 
4

您正在使用的變量包含字符(:/,...),它們不能是URL參數的一部分。

使用encodeURI()改變你的路徑爲參數,可以在URL中傳遞:

$(document).ready(function(){ 

    $.post("scan.php?dir=" + encodeURI("<?=$_POST['dir']?>"), function(data){ 

     alert(data); 

    }); 

}); 
+0

uriEncode不起作用。 使用urlencode(); –

+0

冒號是允許的,但反斜槓需要編碼。 – bfavaretto

+0

編輯了這兩個問題。謝謝。 – Sirko

0

問題是反斜線,你必須json_encode這樣

$(document).ready(function(){ 
    $.post("scan.php?dir=C:\xampp\\htdocs\\windowsMedias\\music", function(data){ 
     alert(data); 
    }); 
}); 
0

你的路徑其他的答案說,你必須正確編碼yourURL參數。對於這一點,你可以使用encodeURIComponent

$.post("scan.php?dir=" + encodeURIComponent("<?=$_POST['dir']?>"), function(data){ 
    alert(data); 
}); 

是什麼原因造成的錯誤是沒有被編碼的​​反斜槓。您的網址包含\x,這是一個特殊的十六進制轉義序列標記。它期望以下兩個字符是有效的十六進制數字(即[0-9a-fA-F]),否則會導致錯誤。