2010-03-22 27 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识别和解析你的字符串。

相关问题