为了账号安全,请及时绑定邮箱和手机立即绑定

更改 javascript 文件中的硬编码 ID

更改 javascript 文件中的硬编码 ID

PHP
杨__羊羊 2023-07-01 09:56:13
我必须解析 javascript 文件并在每次调用特定函数时替换最后一个函数参数。我有一组提供新 ID 的替换值。JavaScript 代码:// every time this function is called I need to replace change_id with different value from arrayfunction submitData(element_id, url, change_id) {...    ...}... // I want to replace 3, 2 and 4 with values from my array// 3,2,4 are just used for example, values are dynamicwindow.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");});我有一个 ids 数组,我想循环遍历它们,并将每个函数调用中的值替换为该数组中的值之一我的阵列:$change_ids = [10,15,20];所以结果应该是:window.addEventListener('beforeunload', function (e) { submitData(1, "http://mysite/metrics, 10");}); window.addEventListener('beforeunload', function (e) { submitData(1, "http://mysite/metrics, 15");}); window.addEventListener('beforeunload', function (e) { submitData(1, "http://mysite/metrics, 20");});只有函数调用中的第三个参数需要更改,所以我考虑使用这样的东西(在这里找到):$search = "/[^metrics,](.*)[^\"\)]/";$replace = "10";$string = file_get_contents($pathToJsFile);echo preg_replace($search,$replace,$string);但问题是$change_id每次函数调用都会相等
查看完整描述

2 回答

?
Smart猫小萌

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

);


查看完整回答
反对 回复 2023-07-01
?
POPMUISE

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);


查看完整回答
反对 回复 2023-07-01
  • 2 回答
  • 0 关注
  • 165 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信