我已经看过很多关于如何执行此操作的帖子,要么在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: </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"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”“。
有什么建议吗?
答案 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/