将值从PHP传递到Javascript变量

时间:2012-03-23 21:15:44

标签: php javascript jquery

我已经看过很多关于如何执行此操作的帖子,要么在php中使用rawurlencode,在javascript中使用decodeURIComponent,要么只使用json_encode。对我来说都不起作用。希望有人能看出我做错了什么:

我有一个像这样的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“a”“。

有什么建议吗?

3 个答案:

答案 0 :(得分:3)

您实际上输出的是javascript字符串文字,因此使用htmlentities不是正确的做法。您需要的是addslashes

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

编辑:不言而喻,您还需要为正在回应的其他两个字符串执行此操作。

这是正确的原因是Javascript string literals的转义序列与addslashes的转义序列兼容,如果忽略addslashes也转义为“null”字符的事实。但是,角色不可能成为您网址的一部分,因此addslashes与Javascript期望的字符串文字之间存在完美匹配。

为了完整性,我应该提到htmlentities的适当用法是处理作为HTML内容的一部分发送的文本;即便如此,htmlspecialchars(执行htmlentities的一小部分工作)几乎总是更合适。

答案 1 :(得分:0)

  • rawurlencode()用于将字符串转换为URL参数

  • htmlentities()用于将字符串转换为HTML内容

如果您想将字符串转换为Javascript字符串,则应为:

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

答案 2 :(得分:0)

以上答案是正确的,但您应该考虑将您的数据添加到php数组或对象,而不是jsonencode并将其添加到日期属性date-camera='{...,而不是使用jQuery .on(。< / p>

这样您就可以通过$(this).data('camera')访问数据了。在不向onclick-function添加越来越多参数的情况下扩展应用程序将很容易。

了解更多信息,请参阅: http://api.jquery.com/jQuery.data/ http://api.jquery.com/on/