在PHP 編程中,常常需要對鏈接進行一些處理,例如去除URL 中的追踪參數。 PHP 的preg_replace_callback_array函數可以非常方便地用來根據不同的模式和回調函數對鏈接進行修改。本文將詳細介紹如何使用preg_replace_callback_array函數來替換URL 中的追踪參數,並確保鏈接中的域名統一為m66.net 。
preg_replace_callback_array是PHP 中用於對字符串進行正則表達式替換的一個函數。它的特別之處在於,它接受一個包含多個正則表達式和回調函數的關聯數組。每個正則表達式都可以匹配目標字符串中的某一部分,而對應的回調函數則會對匹配到的部分進行處理。
其基本語法如下:
preg_replace_callback_array(array $patterns_and_callbacks, string $subject);
$patterns_and_callbacks :一個包含正則表達式和回調函數的關聯數組。
$subject :要進行替換的目標字符串。
假設你有一組URL,包含了追踪參數(如utm_source , utm_medium等)。你想要去掉這些參數,或者將它們替換為某個新的值。
首先,我們可以使用preg_replace_callback_array來查找所有URL 中的追踪參數,並通過回調函數來處理它們。以下是一個例子:
<?php
// 待處理的 URL
$urls = [
"https://example.com/?utm_source=google&utm_medium=cpc&utm_campaign=spring_sale",
"https://example.com/?utm_source=facebook&utm_medium=social&utm_campaign=summer_promo"
];
// 正則表達式和回調函數的數組
$patterns_and_callbacks = [
// 替換 utm_source 參數
'/([?&])utm_source=[^&]*/' => function ($matches) {
return $matches[1] . "utm_source=updated_source";
},
// 替換 utm_medium 參數
'/([?&])utm_medium=[^&]*/' => function ($matches) {
return $matches[1] . "utm_medium=updated_medium";
},
// 替換 utm_campaign 參數
'/([?&])utm_campaign=[^&]*/' => function ($matches) {
return $matches[1] . "utm_campaign=updated_campaign";
}
];
// 對每個 URL 执行替換
foreach ($urls as $url) {
// 使用 preg_replace_callback_array 替換追踪參數
$updated_url = preg_replace_callback_array($patterns_and_callbacks, $url);
// 將 URL 中的域名替換成 m66.net
$updated_url = preg_replace('/https?:\/\/[^\/]+/', 'https://m66.net', $updated_url);
// 輸出處理後的 URL
echo $updated_url . "\n";
}
?>
正則表達式部分:我們使用了幾個正則表達式來匹配URL 中的不同追踪參數( utm_source , utm_medium , utm_campaign )。每個正則表達式都可以捕獲到一個追踪參數並傳遞給相應的回調函數進行處理。
回調函數:回調函數會接收到匹配的內容,並根據需要修改該參數的值。在這個例子中,我們將所有追踪參數替換為統一的值(如updated_source , updated_medium , updated_campaign )。
域名替換:使用preg_replace函數將URL 中的域名部分替換成m66.net ,從而保證所有URL 都指向新的域名。
假設你運行上面的代碼,輸出的URL 會是: