2010-09-07 164 views
2

我想使用一個PHP變量作爲一個JavaScript變量 - 具體而言,我想用戶PHP變量session_id();並將其用作JavaScript變量。如何將一個PHP變量傳遞給javascript?

<?php 
$php_var = session_id(); 
?> 
<script language="JavaScript" type="text/javascript"> 
js_var = <?php echo($php_var ?>; 
</script> 

這似乎應該爲我工作,但它沒有任何人可以提出更好的方法?

+1

重複。 [請使用搜索功能](http://stackoverflow.com/search?q=How+can+I+pass+a+PHP+variable+to+javascript%3F)。 – Gordon 2010-09-07 11:03:53

回答

13

我能想到看起來像這樣的最佳方法:

<?php 
$php_var = session_id(); 
?> 
<script type="text/javascript"> 
    var js_var = <?php echo json_encode($php_var); ?>; 
</script> 

PHP的json_encode -funct ion總是生成有效的JavaScript,如果您只是輸出隨機值,則無法保證。如果您決定不使用json_encode(),則至少應該用引號括起php值以防止出現語法錯誤。注意逃跑!

<?php 
$php_var = session_id(); 
?> 
<script type="text/javascript"> 
    var js_var = "<?php echo $php_var; ?>"; 
</script> 
+3

'json_encode'。這就是它的目的。永遠不要使用raw-echo版本。您冒着bug和XSS安全漏洞的風險。 – bobince 2010-09-07 11:36:08

+0

「請注意逃跑!」是什麼意思?你似乎沒有在你的代碼示例中逃脫任何東西....?謝謝! – JDelage 2012-11-03 20:07:11

+1

@JDelage:我的第一個例子正確地轉義了所有東西(這就是序列化時'json_encode()'所做的)。第二個例子沒有。這就是爲什麼我建議使用第一種技術。第二種技術只有在處理已經轉義的值或不可能導致JavaScript無效的值時纔可用,但它使用起來確實沒什麼意義,因爲第一種技術涵蓋所有情況。 – jwueller 2012-11-06 11:00:19

3

這很好。確保你所回顯的變量是一個字符串,你可以在其中引用引號並在其內部轉義任何引號,換行符等,例如,確保它真正作爲有效的JavaScript字符串文本輸出。另外,不要忘記js_var之前的var

1

它不工作,因爲你的代碼段包含錯誤,它應該是:

<?php 
$php_var = session_id(); 
?> 
<script language="JavaScript" type="text/javascript"> 
js_var = <?php echo $php_var ?>; 
</script> 
2

看來你已經打開的echo調用一個括號,但沒有關閉它。另外,你應該在它後面放一個分號。你也忘記了引號(正如戈登在下面的評論中所說的那樣)。

<?php 
$php_var = session_id(); 
?> 
<script language="JavaScript" type="text/javascript"> 
js_var = "<?php echo($php_var); ?>"; 
</script> 

PSYou可以通過用 '=' 字符替換echo使用較少的代碼:

js_var="<?=$php_var?>"; 

+3

有趣的人最喜歡這個答案,儘管它忽略了圍繞php塊的引號,並使用簡寫語法來廣告,這是[廣泛認爲是不好的做法](http://stackoverflow.com/questions/1386620/php-echo -VS-PHP-短標籤/ 1386631#1386631)。 – Gordon 2010-09-07 11:30:02

+1

我不知道使用簡寫語法很糟糕...感謝您的鏈接。而且你對報價是正確的......我已經改變了它。我真的不知道爲什麼我忘記了他們...... – rhino 2010-09-07 11:34:03