2009-07-02 39 views
0

我在使用空格匹配图像url时遇到了很多困难。正则表达式将图像中的空格变为实体

我需要这个

http://site.com/site.com/files/images/img 2 (5).jpg 

到这样一个div:

.replace(/(http:\/\/([^\s]+\.(jpg|png|gif)))/ig, "<div style=\"background: url($1)\"></div>") 

下面是关于该线程: regex matching image url with spaces

现在我决定先进行将空格转换为实体,以便上述正则表达式可以工作。

但是我真的有很多困难这样做。 事情是这样的:

.replace(/http:\/\/(.*)\/([^\<\>?:;]*?) ([^\<\>?:;]*)(\.(jpe?g|png|gif))/ig, "http://$1/$2%20$3$4") 

替换一个空间,可是其余的仍是空格。

我需要编写一个正则表达式,将http://和图像扩展名(png | jpg | gif)之间的所有空格放入%20。

在这一点上,坦率地说不知道是否有可能。任何帮助表示赞赏,谢谢。

试图Paolo的逃生:

.escape(/http:\/\/(.*)\/([^\<\>?:;]*?) ([^\<\>?:;]*)(\.(jpe?g|png|gif))/) 

另一种方式,我可以做到这一点是在PHP中逃脱服务器端,并在PHP我可以用文件名直接一塌糊涂,而无需在正则表达式匹配。

但据我所知,类似htmlentities的东西不适用于空格。这个方向的任何提示都会很棒。

+0

你必须调用转义的任何字符串你打电话给正则表达式... – 2009-07-02 04:08:20

+0

什么字符串?我需要匹配(y)图片网址。 – Mark 2009-07-02 04:35:57

+0

你需要将它与什么相匹配? – 2009-07-02 05:20:38

回答

0

如果你想控制的替代字符,但不希望使用正则表达式,一个简单的...

$destName = str_replace(' ', '-', $sourceName); 

可能..would是更有效的解决方案。

4

尝试escape功能:

>>> escape("test you"); 
test%20you 
0

比方说你有字符串变量urlWithSpaces它被设置为包含空格的URL。

只需进入:

urlWithoutSpaces = escape(urlWithSpaces); 
+0

问题是,当我开始在客户端做些什么时,url会成为用户提交的帖子的一部分,所以我必须首先匹配它。 – Mark 2009-07-02 18:23:08

0

urlencode()怎么样 - 可以做你想做的。

0

在JS方面,你应该使用encodeURI(),并使用escape()作为后备。使用encodeURI()的原因是它使用UTF-8编码,而escape()使用ISO Latin。同样的问题适用于解码。

encodeURI = encodeURI || escape; 

alert(encodeURI('image name.png'));