php - 如何附加到字符串中的所有网址?

标签 php

我应该如何将即将作为电子邮件发送的 html 字符串附加到所有 url 的末尾?我想像这样向其中添加谷歌分析事件跟踪:
?utm_source=email&utm_medium=email&utm_campaign=product_notify

99% 的页面不会以“.html”结尾,并且一些 url 可能已经在末尾包含 ?sr=1 之类的内容。

最佳答案

更新@ircmaxell 的回答,正则表达式现在即使在 href 和代码简化之前有属性时也匹配。

/**
 * @param string $body
 * @param string $campaign
 * @param string $medium
 * @return mixed
 */
protected function add_analytics_tracking_to_urls($body, $campaign, $medium = 'email') {
    return preg_replace_callback('#(<a.*?href=")([^"]*)("[^>]*?>)#i', function($match) use ($campaign, $medium) {
        $url = $match[2];
        if (strpos($url, '?') === false) {
            $url .= '?';
        } else {
            $url .= '&';
        }
        $url .= 'utm_source=' . $medium . '&utm_medium=' . $medium . '&utm_campaign=' . urlencode($campaign);
        return $match[1] . $url . $match[3];
    }, $body);
}

关于php - 如何附加到字符串中的所有网址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2990426/

相关文章:

php - 在 PHP7 Apache/2.4.7 (Ubuntu) 上安装 phpmyadmin 时遇到问题

php - Symfony "Invalid env"- 只允许 "word"个字符

javascript - 如何将文本框中的聊天消息显示到div

php - 添加特定 MySQL 代码后网页停止加载

php - 将代码更新应用于正在运行的网站的最佳方式?

php - 将字符串转换为数学方程

php - bind_param() 中的第一个参数到底做了什么?

javascript - 是否可以将 Javascript 函数参数传递给 PHP?

php - 无法使用 AJAX 发送 POST 值

php - Symfony 'SQLSTATE[HY000] [1049] Unknown database ' symfony''