2012-03-23 14 views
0

私はPHPでrawurlencodeを、JavaScriptでdecodeURIComponentを使用すると言うか、json_encodeを使用すると言うことができます。どちらも私のために働く。PHPからJavascript変数に値を渡す

私はこのようなhtmlのボタンがあります:誰かが私が間違ってやっているかを見ることができます願って

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); 
... 
} 
... 
} 

私が試した:

<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の編集ボタンにすることを渡します上記のように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']); ?> 

編集:それはあなたも、あなたが響いている他の二つの文字列のためにこれを行うために必要なことは言うまでもないです。

addslashesも ​​"null"文字をエスケープするという事実を無視すると、Javascript string literalsのエスケープシーケンスはaddslashesのものと互換性があるからです。しかし、文字があなたのURLの一部になる方法はないので、addslashesと完全に一致し、Javascriptが文字列リテラルから期待するものと完全に一致します。

完全性のために、htmlentitiesを適切に使用することは、HTMLコンテンツの一部として送信されるテキストを処理することです。その場合でも、htmlspecialchars(これは、仕事の小さなサブセットhtmlentitiesを実行します)は、ほとんどの場合、より適切です。

+0

が、私はこれを適用して、私はjson_encodeを使用する場合、それは私の説明と同じエラーを与えて? – Tom

+0

@Tom:3回のオカレンスを「addslashes」に変更しましたか? – Jon

+0

はい、同じエラーです。 – Tom

0
  • rawurlencodeは())

  • にhtmlentitiesは(URL引数に文字列を変換するためであるあなたが変換したい場合は、HTMLコンテンツ

に文字列を変換するものです文字列をJavascript文字列にする必要があります。

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

上記の答えは正しいjsonencodeよりもPHP配列やオブジェクトにデータを追加し、日付属性date-camera='{...に追加することを検討してください。jQuery .on(。

この方法で、$(this).data('camera')でデータにアクセスできます。 onclick関数に多くのパラメータを追加することなく、あなたのアプリケーションを拡張するのは簡単です。詳細については、

は、以下を参照してください。 http://api.jquery.com/jQuery.data/ http://api.jquery.com/on/

関連する問題