Как удалить код отслеживания из ссылок в PHP - PullRequest
4 голосов
/ 23 апреля 2019

Привет, у меня есть форма в WordPress, где пользователи могут отправить ссылку на продукт, но очень часто ссылки идут с ненужным багажом, например, с кодами отслеживания.Я хотел бы создать фильтр в WordPress и очистить ссылки, чтобы они состояли только из рабочей ссылки.Я хотел бы, если возможно, подтвердить, что ссылка все еще работает, или метод, который гарантирует, что ссылка все еще будет работать.

Основными вещами, от которых я хочу избавиться в ссылках, являются utm_source и ее содержимое,utm_medium и его содержимое, и т. Д. Все, кроме чистой рабочей ссылки.

Так, например, такая ссылка: https://www.serenaandlily.com/variationproduct?dwvar_m10055_size=Twin&dwvar_m10055_color=Chambray&pid=m10055&pdp=true&source=detail&utm_source=affiliate&utm_medium=affiliate&utm_campaign=pjdatafeed&publisherId=20648&clickId=2669312134#fo_c=745&fo_k=c0ebaf8359ca7853df8343e535533280&fo_s=pepperjam

В итоге будет выглядеть так:

https://www.serenaandlily.com/variationproduct?dwvar_m10055_size=Twin&dwvar_m10055_color=Chambray&pid=m10055

Я был бы очень признателен, если бы кто-нибудь смог направить меня в правильном направлении.

Спасибо!

Ответы [ 2 ]

1 голос
/ 23 апреля 2019

Вы можете делать что хотите с explode, parse_str и http_build_query. Этот код использует массив нежелательных параметров, чтобы решить, что удалить из строки запроса:

$unwanted_params = array('utm_source', 'utm_medium', 'utm_campaign', 'clickId', 'publisherId', 'source', 'pdp', 'details', 'fo_k', 'fo_s');
$url = 'https://www.serenaandlily.com/variationproduct?dwvar_m10055_size=Twin&dwvar_m10055_color=Chambray&pid=m10055&pdp=true&source=detail&utm_source=affiliate&utm_medium=affiliate&utm_campaign=pjdatafeed&publisherId=20648&clickId=2669312134#fo_c=745&fo_k=c0ebaf8359ca7853df8343e535533280&fo_s=pepperjam';
list($path, $query_string) = explode('?', $url, 2);
// parse the query string
parse_str($query_string, $params);
// delete unwanted parameters
foreach ($unwanted_params as $p) unset($params[$p]);
// rebuild the query
$query_string = http_build_query($params);
// reassemble the URL
$url = $path . '?' . $query_string;
echo $url;

Выход:

https://www.serenaandlily.com/variationproduct?dwvar_m10055_size=Twin&dwvar_m10055_color=Chambray&pid=m10055

Демонстрация на 3v4l.org

0 голосов
/ 23 апреля 2019

Вы можете сделать это в самом PHP. Существует функция с именем parse_url() (https://secure.php.net/manual/en/function.parse-url.php), которая может выдавать вам все параметры URI в виде массива. После анализа вы можете отфильтровать параметры, удалить ненужные. Наконец, используйте http_build_query() (https://secure.php.net/manual/en/function.http-build-query.php) чтобы создать строковый URI для возврата:)

...