在javascript变量中存储php $ _GET变量?

时间:2011-03-15 12:51:06

标签: php javascript variables get

我使用$ _GET方法(team1,team2)将两条信息传递到php页面。 我想在一些javascript中将它们用作变量。我怎么能这样做?

谢谢

7 个答案:

答案 0 :(得分:8)

由于$_GET只是访问查询字符串中的变量,如果您愿意,可以从javascript中执行相同操作:

<script>
var $_GET = populateGet();

function populateGet() {
  var obj = {}, params = location.search.slice(1).split('&');
  for(var i=0,len=params.length;i<len;i++) {
    var keyVal = params[i].split('=');
    obj[decodeURIComponent(keyVal[0])] = decodeURIComponent(keyVal[1]);
  }
  return obj;
}
</script>

答案 1 :(得分:1)

原始回答:

在.php文件中。

<script type="text/javascript"> 
  var team1, team2; 
  team1 = <?php echo $_GET['team1']; ?>; 
  team1 = <?php echo $_GET['team1']; ?>; 
</script>

更安全的回答:

当我抨击这个答案时,甚至没有考虑过XSS。 (查看注释!)$ _GET数组中的任何内容都应该被转义,否则用户可以将他们想要的任何JS插入到页面中。所以尝试这样的事情:

<script type="text/javascript"> 
  var team1, team2; 
  team1 = <?php echo htmlencode(json_encode($_GET['team1'])); ?>; 
  team1 = <?php echo htmlencode(json_encode($_GET['team1'])); ?>; 
</script>

从这里http://www.bytetouch.com/blog/programming/protecting-php-scripts-from-cross-site-scripting-xss-attacks/

有关来自Google http://code.google.com/p/doctype/wiki/ArticleXSSInJavaScript的XSS的更多信息。

为评论者欢呼。

答案 2 :(得分:1)

确保使用htmlentities之类的内容来转义值,以便您的应用程序不会受到跨站点脚本攻击的影响。理想情况下,您需要验证变量,以确保它们在输出到页面之前是预期值。

<script type="text/javascript"> 
  var team1 = '<?php echo htmlentities($_GET['team1']); ?>'; 
  var team2 = '<?php echo htmlentities($_GET['team2']); ?>'; 
</script>

答案 3 :(得分:0)

<script type="text/javascript">
  var team1 = <?php echo $_GET['team1'] ?>;
  var team2 = <?php echo $_GET['team2'] ?>;
</script>

答案 4 :(得分:0)

其他方法有点脏,可能会有一些问题。你最好只使用javascript:

<script>
function get_data(name){
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp(regexS);
  var results = regex.exec(window.location.href);
  if(results == null) return "";
  else return results[1];
}

var var1 = get_data('var1');
var var2 = get_data('var2');
</script>

但这仍然不是超级安全。

我想到的另一种方法是打印$ _GET数组。不过,我不知道这是否会奏效。无论如何,如果确实如此,那么它就是:

<script>
    var _get = <?php print_r($_GET); ?>

    var team1 = _get['team1'];
    var team2 = _get['team2'];
</script>

你想在一个函数上运行array_walk(或类似的东西)来清理每个字符串。

答案 5 :(得分:0)

使用javascript执行此操作的另一种方法:

var team1 = $_GET('team1');

function $_GET(q,s) {
        s = s ? s : window.location.search;
        var re = new RegExp('&'+q+'(?:=([^&]*))?(?=&|$)','i');
        return (s=s.replace(/^?/,'&').match(re)) ? (typeof s[1] == 'undefined' ? '' : decodeURIComponent(s[1])) : undefined;
} 

答案 6 :(得分:-1)

确保您的$_GET vars可用而非空,并使用以下内容:

<script type="text/javascript">
    var team1 = <?php echo $_GET['team1']; ?>;
    var team2 = <?php echo $_GET['team2']; ?>;
</script>