2 回答
TA贡献1911条经验 获得超7个赞
您可以通过将 javascript 字符串转换为带有占位符的“模板”来避免本机函数调用%d
,然后只需将新 id 注入到这些占位符中vsprintf()
(我将用 进行演示vprintf()
,以便将字符串打印到屏幕上)。
代码:(演示)
$string = <<<JS
function submitData(element_id, url, change_id) {...
...
}
...
window.addEventListener('beforeunload', function (e) { submitData(1, "http://mysite/metrics, 3");}); window.addEventListener('beforeunload', function (e) { submitData(1, "http://mysite/metrics, 2");}); window.addEventListener('beforeunload', function (e) { submitData(1, "http://mysite/metrics, 4");});
JS;
$change_ids = [19, 7, 11];
vprintf(
preg_replace('~metrics,\s*\K\d+~', '%d', $string),
$change_ids
);
TA贡献1765条经验 获得超5个赞
我最终得到了这个解决方案:
$javascript = file_get_contents($path);
if (empty($javascript)) {
return false;
}
$search = '/(?<=metrics\",)\s*.*?(?=\))/';
此模式将从该字符串返回“1”(空格 1):
window.addEventListener('beforeunload', function (e) { SubmitData(1, "http://mysite/metrics", 1 );});
之后,我用数组中的值替换匹配项。
$javascript = preg_replace_callback($search,function($m) use (&$change_ids) {
$m = $m[key($m)];
$m = ' '. array_shift($change_ids);
return $m;
},$javascript);
return file_put_contents($path, $javascript);
- 2 回答
- 0 关注
- 165 浏览
添加回答
举报