在 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 而不是正则表达式剥离来完成。
我正在一个网站上工作,但不知何故,我有时会在某些字符串结束后添加内容时遇到一些小错误。
例如:
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 而不是正则表达式剥离来完成。