2010-03-22 49 views
1

我不能改變文本框的到PHP值(存儲在變量$code)的值(id爲「代碼」):如何正確插入一個變量作爲生成的JavaScript值的值?

$code = $_POST['code']; 
echo "<script language='javascript'> 
document.getElementById('code').value = $code </script>"; 

我也試過'$code'"$code","..." + "%code + "...",但是沒有幫助。 我在做什麼錯?

+0

你能告訴我們一個它輸出的例子嗎? – ryeguy 2010-03-22 18:43:51

+4

注意:'language'屬性已被棄用。改用'type =「text/javascript」'。 – Matchu 2010-03-22 18:46:43

+1

這真的很危險,人們破解你的應用的好地方,你基本上允許任何人在你的頁面上寫js。我會考慮重新設計。至少,請確保$ code中的值是預期的格式。 – 2010-03-22 18:50:11

回答

3

$ code是否包含一個字符串?如果是這樣,你需要引用它。

例如如果$ code等於「我的測試字符串」,則Javascript將輸出如下:

$code = $_POST['code']; 
echo "<script language='javascript'> 
document.getElementById('code').value = my test string </script>"; 

這是無效的Javascript。

您需要:

$code = str_replace("'", "\'", $_POST['code']); 
echo "<script language='javascript'> 
document.getElementById('code').value = '$code' </script>"; 

我還要做:

$code = str_replace("'", "\'", htmlspecialchars($_POST['code'])); 

htmlspecialchars報價HTML字符,以防止XSS攻擊。

+0

+1在這裏正確的答案。這絕對是導致他的問題,只需在$ code周圍添加引號。另外,正如我之前評論過的,這是非常危險的,請確保您按照Michael Boyd的建議清理字符串。將js放入字符串時轉義單引號和雙引號將可以解決這個問題。 – 2010-03-22 18:56:57

+0

是的!我是世界之王!我的意思是,安迪是;) 我檢查了htmlspecialchars文檔,它只是將特殊字符轉換爲HTML編碼。你在這裏說的是「替換」和「HTML編碼」。這是如何防止XSS攻擊的? – 2010-03-22 19:10:15

+0

因爲有人可以通過''放入您的POST變量中,該變量將按原樣打印到您的HTML中,並且瀏覽器將執行它,因爲它是'

3

試試這個:

$code = $_POST['code']; 
echo "<script language=\"javascript\"> 
document.getElementById(\"code\").value =". $code. "</script>"; 

或者更好的是:

<?php 
$code = str_replace("'", "\'", htmlspecialchars($_POST['code'])); 
?> 

<script type="text/javascript"> 
document.getElementById("code").value = "<?php echo $code;?>";//OR <?= $code;?>; 
</script> 
+0

+1連接。如果你可以提供幫助的話,它會回顯HTML,如果HTML只是輸出的一部分,它更容易維護。另外,如果'$ code'是一個字符串,它將需要'document.getElementById(「code」).value =「<?php echo $ code;?>」;'並且可能會轉義'「'字符。 – 2010-03-22 19:06:13

+0

@Andy E是安迪我錯過了那個,修正了它tnx:D – ant 2010-03-22 19:08:59

1

.value = $code

.value = '".str_replace("'", "\'", $code)."'

0

PHP沒有看到你寫的$code。使用這個來代替:

$code = $_POST['code']; 
echo "<script language='javascript'> 
document.getElementById('code').value = ".$code."; </script>"; 

$code = $_POST['code']; 
echo "<script language='javascript'> 
document.getElementById('code').value = {$code}; </script>"; 

要麼更明確地允許PHP識別和解析你的字符串。

相關問題