如何解决网址参数regex
| 我创建了自己的新闻通讯模块,并遇到了一个(大)问题。 系统会使用其他参数设置所有网址的格式,以跟踪Google Analytics(分析)中的点击次数。 例如 像这样的网址 http://www.domain.com 变成这样 http://www.domain.com/&utm_source=newsletter&utm_medium=e-mail&utm_campaign=test 和这样的网址 http://www.domain.com/?page=1 变成这样 http://www.domain.com/?page=1&utm_source=newsletter&utm_medium=e-mail&utm_campaign=test 第一个例子是伪造的。我知道第一个“&”号必须替换为“&”号,这就是问题所在。 我正在使用此模式提取网址$pattern = array(\'#[a-zA-Z]+://([-]*[.]?[a-zA-Z0-9_/-?&%\\{\\}])*#\');
$replace = array(\'\\\\0&utm_source=newsletter&utm_medium=e-mail&utm_campaign=test\');
$body = preg_replace($pattern,$replace,$body);
有人可以帮助我使用正确且有效的正则表达式,因此第一个url参数始终包含问号而不是&符吗?
解决方法
只是使用
if(strpos($string,\'?\') !== false)
//add with ampersand
else
//add with question mark
,不是正则表达式,但它可以工作。它所做的就是检查?如果找不到,请将第一个&更改为问号。:
$url = (substr_count($url,\'?\')>0) ? $url : str_replace(\'&\',\'?\',$url,1);
,一种非常简单的方法是查找类似http://...&
的字符串,其中...
不包含?
问号或其他定界符:
= preg_replace(\'#(http://[^\\s\"\\\'<>?&]+)&#\',\'$1?\',$src);
但是,如果您使用受限字符类而不是否定字符类,那可能是最好的:
$src = preg_replace(\'#(http://[\\w/.]+)&#\',$src);
,此解决方案可修复所有以&
(缺少missing5ѭ)开头的查询的网址:
$re = \'%([a-zA-Z]+://[^?&\\s]+)&(utm_source=newsletter)%\';
$body = preg_replace($re,\'$1?$2\',$body);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。