在 smarty 或 javascript/jQuery 中匹配特定单词后截断字符串

Truncate a string after match a specific word in smarty or javascript/jQuery

我正在一个网站上工作,但不知何故,我有时会在某些字符串结束后添加内容时遇到一些小错误。

例如: style="background-image:url({$sub.image});" return style="background-image:url(http://blablalba.fr/phoenix.jpg%3Fv%3D1);"

如您所见,在 link(.jpg 之后)结束后有 %3Fv%3D1。我不知道这是从哪里来的,我想删除它。

所以我的问题是:在 smarty 中有没有办法在匹配单词后截断字符串?

如果不可能,Js/jQuery 中最简单的方法是什么?

我很难用这个正则表达式来匹配正确的字符串:/^(.*?\.jpg)/

所以它让我想到了这个:

$('.append').each('li',function(){
   var newLink = $(this).find('div').css('background-image').match(/^(.*?\.jpg)/);
   $(this).find('div').css('background-image',newLink);
})

但这仍然存在问题,所以如果有人对我该怎么做有更好的想法?

这里是JsFiddle如果能提供一些帮助的话

编辑 + 回答

好的,就像下面@Hitmands 所说的那样,它是 URI 编码的问题。 所以这是最清晰和最聪明的解决方案:

$('.imgLittle').each(function() {
    newLink = decodeURIComponent($(this).css('background-image'));
    $(this).css('background-image',newLink)
})

这是最终的(工作)JsFiddle

希望这能对某人有所帮助。

如果您尝试在您的控制台中执行此 window.decodeURIComponent("%3Fv%3D1") 它 returns 一个简单的 "?v=1",这可能是一种方法管理客户端缓存...当 v(版本?)参数更改时,它会强制浏览器下载资源,即使资源已经缓存...

我认为这是一个你不能剥离的重要信息!

一个聪明的解决方案可能是简单地解码这个参数....你应该,但我不确定,试试http://www.smarty.net/docs/en/language.modifier.unescape.tpl...

如果无法通过 smarty 解码 URI 组件,您可以通过 Javascript 使用您在下面发布的代码和 window.decodeURIComponent 而不是正则表达式剥离来完成。