亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

更改 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 關注
  • 203 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號