2014-06-30 43 views
0

我有以下JavaScript函數。該函數實際上填充jquery日期選擇器,但對於這個問題,我刪除了代碼,因爲它不相關。從包含數學表達式(但實際上是一個日期)的PHP變量的JavaScript字符串評估

function PrintDateToConsole() { 
    var testDate; 

    <?php 
     $test_date = date("Y-m-d", time()); 
     printf("testDate=$test_date;\n"); 
    ?> 

    console.log(test_date); 
} 

當我運行此代碼時,在控制檯中打印的結果是1978年(今天的日期2014-6-30 = 1978)。

爲什麼日期字符串被評估爲數學表達式,我該如何防止它?

注:我相當肯定這是因爲,當我瀏覽網頁我看到源JavaScript的問題,而不是一個PHP的問題:

function PrintDateToConsole() { 
    var testDate; 
    testDate=2014-06-30; 
    console.log(test_date); 
} 
+0

您正在遭受SQL注入攻擊的PHP/JS等價物:您正在將文本從一個上下文輸出到另一個上下文中,而不考慮接收上下文將如何看到該文本。 –

+0

如果你想輸出PHP值給JS,用json_encode包裝它們。您將爲JS生成有效和預期的文字值。 –

回答

0

替換:

printf("testDate=$test_date;\n"); 

用:

printf("testDate='$test_date';\n"); 

日期不作爲JavaScript中的字符串傳遞。相反,你在字面意義上將一些數字與分支運算符放在你的JS中。
修改會把它作爲一個字符串,正確:

testDate='2014-06-30'; 
+1

b。是的,是的,1000x是的。發佈後我會重新閱讀帖子(正如我一直這樣做),這對我來說也是顯而易見的。我去測試它,到我回來的時候,你已經回答了,但我必須等15分鐘才能接受你的答案。 – kinar

+0

如果你堅持使用_function_而不是_language construct_,我建議你按照預期使用它:'printf('var testDate =%s;',json_encode($ test_date));'' –

0

在JavaScript中,這計算:

testDate=2014-06-30; 

爲了得到它作爲一個日期,你可以使用

printf("testDate=new Date('$test_date');\n"); 

但是,從時間戳開始,首先進行格式設置和解析是毫無意義的。你應該簡單地做

printf("testDate=new Date(".time().");\n"); 

這將有額外的好處,以避免由於您的服務器和用戶的瀏覽器之間的時區差異造成的錯誤。

相關問題