Хранение переменной php $ _GET в переменной javascript?

Я передаю две части информации на страницу php, используя метод $ _GET (team1, team2). Я хотел бы использовать их как переменные в некотором javascript. Как я могу это сделать?

благодаря

Solutions Collecting From Web of "Хранение переменной php $ _GET в переменной javascript?"

Оригинальный ответ:

В вашем .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/ .

Подробнее о XSS из Google http://code.google.com/p/doctype/wiki/ArticleXSSInJavaScript .

Приветствует комментаторов.

Поскольку $_GET просто использует переменные в querystring, вы можете сделать то же самое из 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> 

Убедитесь, что вы используете что-то вроде htmlentities, чтобы избежать значений, чтобы ваше приложение не подвержено атакам межсайтового скриптинга. В идеале вы должны проверять переменные, чтобы убедиться, что они являются ожидаемым значением, прежде чем вывести их на страницу.

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

Другой способ сделать это с помощью 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; } 

Другие методы грязные, и могут быть некоторые проблемы. Вам лучше просто использовать 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 (или что-то в этом роде), для функции очистки каждой строки.

Убедитесь, что ваши $_GET вары доступны, а не пусты, и используйте следующее:

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