Я передаю две части информации на страницу php, используя метод $ _GET (team1, team2). Я хотел бы использовать их как переменные в некотором 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>
Подробнее о 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>