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 關注
- 203 瀏覽
添加回答
舉報