2010-07-27 50 views
18

我嘗試過(但它不工作):如何把JavaScript放在JavaScript裏面?

<?php 
    $htmlString= 'testing'; 
?> 
<html> 
    <body> 
    <script type="text/javascript"> 
     var htmlString=<?php echo $htmlString; ?>; 
     alert(htmlString); 
    </script> 
    </body> 
</html> 

這裏是我使用爲目的tutorial

回答

41

試試這個:

<?php $htmlString= 'testing'; ?> 
<html> 
    <body> 
    <script type="text/javascript"> 
     // notice the quotes around the ?php tag   
     var htmlString="<?php echo $htmlString; ?>"; 
     alert(htmlString); 
    </script> 
    </body> 
</html> 

當你遇到這樣的一個問題,一個好主意是檢查你的瀏覽器的JavaScript錯誤。不同的瀏覽器有不同的顯示方式,但尋找一個JavaScript控制檯或類似的東西。另外,請查看瀏覽器查看頁面的來源。

有時初學者對字符串中的引號感到困惑:在PHP部分中,您將'testing'指定爲$htmlString。這將一個字符串值放入該變量中,但該值中沒有引號:它們僅用於解釋器,因此他知道:哦,現在出現字符串文字

+1

@ inf3rno,如果它是錯誤的,我們應該修正它!不能讓錯誤的答案在這裏......究竟是什麼錯誤?(我假設你反對最後一段......嗯......有點難以向初學者解釋 - ) – 2013-06-27 08:04:08

+0

@ inf3rno,哦......我剛剛看到了你自己的答案,嗯......你有一個觀點......除了我認爲對於OP的級別是ATM,它有點兒TMI。他似乎還沒有把他的腦袋纏到一些基本的東西上。 – 2013-06-27 08:08:19

+3

這很容易解釋,如果你想注入字符串到JavaScript代碼,你必須逃避它的JavaScript ... json_encode做到了......它是非常相似的SQL注入預防,由你有o逃避sql ... – inf3rno 2013-06-27 08:13:16

23

你錯過了周圍的字符串引號:

... 
var htmlString="<?php echo $htmlString; ?>"; 
... 
+1

'$ htmlString =「\」「'呵呵,我想知道爲什麼JavaScript突然停止工作... – zzzzBov 2013-06-27 04:55:25

5

你需要的字符串引號包圍在JavaScript

var htmlString="<?php echo $htmlString; ?>"; 
+1

毆打一分鐘:] – Anraiki 2010-07-27 16:24:51

10

如果使用.js文件,上述所有解釋都不起作用。如果你想PHP解析成.js文件,你必須modfiying的的.htaccess中的.js文件駐留使用下面的命令,讓您的服務器上進行更改:

<FilesMatch "\.(js)$"> 
    AddHandler application/x-httpd-php .js 
</FilesMatch> 

然後,文件test.js包含下面的代碼文件將在客戶端執行.JS與服務器端的解析PHP:

<html> 
<head> 
<script> 
function myFunction(){ 
    alert("Hello World!"); 
} 
</script> 
</head> 
<body> 
<button onclick="myFunction()"><?php echo "My button";?></button> 
</body> 
</html> 
7

把服務器端數據到生成的JavaScript代碼的唯一正確方法:

<?php $jsString= 'testing'; ?> 
<html> 
    <body> 
    <script type="text/javascript">  
     var jsStringFromPhp=<?php echo json_encode($jsString); ?>; 
     alert(jsStringFromPhp); 
    </script> 
    </body> 
</html> 

使用簡單的引號,您的變量內容不會針對HTML和JavaScript進行轉義,因此受XSS攻擊的攻擊...

由於類似的原因,我建議您使用document.createTextNode()而不是設置innerHTML。 OFC。它更慢,但更安全......

+2

從技術上講,這不是「唯一」的方式,但它肯定是一種安全的方式。也就是說,人們不應該用PHP開始創建JavaScript。 – zzzzBov 2013-06-27 04:54:38

+0

這取決於你想發送什麼樣的數據。 html unicode字符與javascript unicode字符不同,因此您必須轉換它們...使用REST服務和適當的客戶端庫來處理請求的另一種方式,例如extjs或主幹。順便說一句。在這種情況下你也必須使用json_encode ... – inf3rno 2013-06-27 05:05:21