PHP拼接onclick函数时,如何传递带单引号的日期字符串参数?
解决JS onclick中日期参数未带单引号的问题
这个问题很典型——你拼接HTML的时候没给日期值加上引号,导致渲染后JS把2018-04-15当成了算术表达式(2018减4减15),而不是你想要的字符串日期。
两种解决方法:
1. 手动给日期参数添加转义的单引号
直接在PHP拼接字符串时,给$eddt前后加上转义的单引号(因为外层是单引号包裹的字符串,所以要转义内部的单引号):
$html.='<img class="page_img current_thumb" src="'.site_url().'assets/admin/'.$data['edp_image'].'" alt="" title="" id="img_'.$i.'" onclick="return set_active('.$pub_id.','.$ed_id.',\''.$eddt.'\','.$i.','.$data['edp_page_num'].','.$tot_pages.');" id="img_'.$i.'" />';
这样渲染后的onclick会变成:
return set_active(2,2,'2018-04-15',1,1,2);
2. 使用json_encode()(更安全推荐)
如果日期里可能包含特殊字符(比如引号、斜杠),用json_encode()会自动处理转义,同时输出带引号的字符串:
$html.='<img class="page_img current_thumb" src="'.site_url().'assets/admin/'.$data['edp_image'].'" alt="" title="" id="img_'.$i.'" onclick="return set_active('.$pub_id.','.$ed_id.','.json_encode($eddt).','.$i.','.$data['edp_page_num'].','.$tot_pages.');" id="img_'.$i.'" />';
这种方式渲染后会得到带双引号的日期字符串,JS同样能正确识别为字符串类型,而且能避免潜在的语法错误或XSS风险。
为什么会出问题?
在JavaScript中,没有引号包裹的2018-04-15会被解析为减法运算:2018 - 4 - 15 = 1999,完全偏离了你要传递日期的初衷。给字符串加上引号后,JS才会把它当作字符串值处理。
内容的提问来源于stack exchange,提问作者gomesh munda
相关产品推荐
相关产品推荐

