You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:27:18