2011-07-07 20 views
1

我試圖在javascript函數內打印一個變量值。如果變量是一個整數($ myInteger),它工作正常,但是當我想訪問文本($ myText)時,它會給出一個錯誤。在javascript函數中打印varchar php變量

<?php $myText = 'some text'; 
    $myInteger = '220'; 
?> 

<script type="text/javascript"> 

<?php print("var myInteger = " . $myInteger . " ;\n");?> //works fine 
<?php print("var myText = " . $myText . " ;\n");?> //doens't work 

</script> 

任何人都可以向我解釋爲什麼會發生這種情況,以及如何改變它?

+0

您是否將數據庫中的表列從「INT」更改爲「VARCHAR」?在這種情況下,您需要向我們展示如何從數據庫中獲取價值,並將其轉換爲「$ myText」 - 這可能是問題所在。 – LHMathies

+0

什麼錯誤? $ myText中有什麼?它是否被引用? –

+0

粘貼更多代碼,以便我可以看到您正在嘗試執行的操作... –

回答

3

問題來自問題的代碼是生成的Javascript代碼將缺少字符串周圍的引號。

你可以添加引號手動輸出,如下所示:

print("var myText = '". $myText. "';\n"); 

但是請注意,這將打破,如果字符串本身包含引號(或換行字符,或者其他一些),所以你需要逃避它。

這可以使用addslashes()函數等來處理,但這可能仍然存在問題。

更好的方法是使用PHP的內置JSON功能,該功能是專門爲生成Javascript變量而設計的,因此它會正確地爲您進行所有轉義。

您正在尋找的功能是json_encode()。你會使用它如下:

print("var myText = ". json_encode($myText). ";\n"); 

這將適用於任何變量類型 - 整數,字符串,甚至數組。

希望有所幫助。

+0

謝謝!它工作,乾淨,優雅。 – Vonder

1

如果沒有更多的代碼,我們真的不知道你想要做什麼或你得到了什麼錯誤(或者從那裏偶數),但如果要我猜:

如果你是把一個將字符串轉換爲javascript變量,您可能需要引用它。

<?php print("var myText = '" . $myText . "' ;\n");?> 
         ---^^^-------------^^^---- 

// Or even better: 
<?php print("var myText = '$myText' ;\n");?> 

附錄每下面的評論,如果你希望你的$myText包含引號不要用這個。

+0

-1,因爲如果$ myText包含引號字符,則會崩潰。 – Spudley