Velocity使用split分割URL并拼接参数与锚点的正确语法求教
问题原因
你的代码主要有3个语法/逻辑问题:
- Velocity的
#set指令不需要以分号结尾,多余的分号会被识别为变量值的一部分,导致数组解析异常 - 没有处理URL无锚点的场景,此时
myArray[1]不存在,直接拼接会输出$myArray[1]原始文本破坏URL - 未兼容原URL本身已携带查询参数的场景,直接拼接
?会出现两个?导致参数失效
正确实现代码
<div> #set ($hasAnchor = $string.contains("#")) #if ($hasAnchor) ## split第二个参数设为2,避免锚点内容里的#导致分割异常 #set ($myArray = $string.split("#", 2)) #set ($pathPart = $myArray[0]) #set ($anchorPart = "#$myArray[1]") #else #set ($pathPart = $string) #set ($anchorPart = "") #end ## 兼容原URL已有查询参数的场景 #set ($connector = $pathPart.contains("?") ? "&" : "?") #set ($finalUrl = "${pathPart}${connector}utm_campaign=abc&utm_medium=def${anchorPart}") <a href="$finalUrl"> Link Text </a> </div>
适配场景说明
- 原URL无锚点的情况:比如输入
http://url.com,输出http://url.com?utm_campaign=abc&utm_medium=def - 原URL带锚点的情况:比如输入
http://url.com#anchor,输出http://url.com?utm_campaign=abc&utm_medium=def#anchor - 原URL已有查询参数的情况:比如输入
http://url.com?a=1#anchor,输出http://url.com?a=1&utm_campaign=abc&utm_medium=def#anchor
内容的提问来源于stack exchange,提问作者MaxRocket
相关产品推荐
相关产品推荐

