php
  • javascript
  • jquery
  • 2012-03-23 138 views 0 likes 
    0

    我見過無數帖子關於如何做到這一點,要麼在php中使用rawurlencode,要麼在javascript中使用decodeURIComponent,或者只使用json_encode。兩者都不適合我。希望有人能看到我在做什麼錯:將值從PHP傳遞到Javascript變量

    我有一個HTML按鈕這樣的:

    <button id="editbutton" onClick='edit(this, "<?php echo htmlentities($_SERVER['REQUEST_URI']); ?>", "<?php echo $result_cameras[$i]["camera_type"]; ?>", "<?php echo rawurlencode($result_cameras[$i]["camera_name"]); ?>")'>Edit</button> 
    

    我傳遞到JavaScript的編輯按鈕:

    var edit = function(t, to, cameratype, cameraname, cameraquality, camerahash, camerastatus, emailnotice, camerasensitivity, axisuser, axispass, axisip, axisport) 
    { 
    
    if (mydiv.find("form").length) { 
        mydiv.show(); 
    } else { 
        // fields 
        var $myform = $("<form id='EditCameraForm' name='' method='post' action='" + to + "'></form>"); 
        var $myfieldset = $("<fieldset><legend>Edit camera settings</legend></fieldset>"); 
        var $myinput = $('<input/>').attr('type','hidden').attr('name','camera_type').val(cameratype); 
        var $mylabel = $("<label for='CameraName'>Camera name:&nbsp;</label>"); 
        var $myinput2 = js('<input/>').attr('size','25').attr('name','camera_name').attr('id','CameraName').val(decodeURIComponent(cameraname)); 
        $myform.append($myinput, $mylabel, $myinput2); 
    ... 
    } 
    ... 
    } 
    

    我試着使用rawurlencode/decodeURIComponent作爲上面,當我點擊編輯按鈕,如果相機名稱被調用:a"a(只測試報價)我得到a&quot;a。反斜線如a\b只是返回一些奇怪的字符。

    如果我嘗試:

    <?php echo json_encode($result_cameras[$i]["camera_name"]); ?> 
    

    ,不要把任何JavaScript代碼中我得到這個錯誤:

    missing) after argument list

    edit(this, "/dashboard", "WEBCAM", ""a"a"", "0", "3dd10c49784e2207de1e1932958bfb... 當它指向了 「」 一「a」。

    有什麼建議嗎?

    回答

    3

    您實際上正在輸出一個javascript字符串文字,因此使用htmlentities不是正確的操作。你所需的是addslashes

    <?php echo addslashes($_SERVER['REQUEST_URI']); ?> 
    

    編輯:不言而喻,您還需要爲您的呼應其他兩個字符串做到這一點。

    這是正確的原因是,Javascript string literals的轉義序列與addslashes的轉義序列兼容,如果您忽略addslashes也會轉義「null」字符的事實。然而,這個角色不可能成爲你網址的一部分,所以addslashes的行爲與Javascript期望的字符串文字之間是完全一致的。

    爲了完整起見,我應該提到htmlentities的適當用法是處理作爲HTML內容的一部分發送的文本;即使如此,htmlspecialchars(它執行htmlentities的一小部分工作)幾乎總是更合適。

    +0

    我申請這一點,它給了同樣的錯誤我介紹時,我使用json_encode? – Tom 2012-03-23 21:24:26

    +0

    @Tom:你是否將所有三次出現改爲'addslashes'? – Jon 2012-03-23 21:25:55

    +0

    是的,同樣的錯誤。 – Tom 2012-03-24 11:50:32

    0
    • rawurlencode()是一個字符串轉換爲URL參數

    • ヶ輛()是一個字符串轉換爲HTML內容

    如果你想轉換一個字符串到Javascript字符串它應該是:

    function f_str_2js($x) { 
        return str_replace(array("\n","\r","\t","'",'"') , array('\n','\r','\t',"\\'",'\"') , $x) 
    } 
    
    0

    上述答案是正確的,但你應該考慮將數據添加到php數組或對象,而不是jsonencode,並將其添加到日期屬性date-camera='{...比使用jQuery .on(。

    這樣您就可以通過$(this).data('camera')訪問數據。無需在onclick函數中增加更多參數,即可輕鬆擴展您的應用程序。

    更多信息,請參見: http://api.jquery.com/jQuery.data/ http://api.jquery.com/on/

    相關問題