转义空格:%20或+ - 聪明

时间:2013-01-15 12:10:28

标签: php escaping smarty

我使用smarty作为模板引擎。我必须转义图像文件路径{$ filepath | urlencode},问题是白色空间被转换为'+',这会阻止在服务器上访问图像:%20会工作,如何正确转义我自己的路 ? 编辑:更确切地说,我使用facebook分享链接

我使用facebook共享,并且在共享时不显示图像:

`<a href="facebook.com/dialog/feed?app_id={$fbappid}&amp;link={$mainsite|‌​escape:'u‌​rl'}{$someurl|urlencode}&amp;picture={$mainsite|escape:'url'}{$picture()‌​|escape‌​:"url"}&amp;name={$somename}&amp;description=Join%20Us%21 &amp;redirect_uri={$mainsite|escape:'url'}{$some|urlencode}" onclick="window.open(this.href);return false;"></a>`

最终代码与我的具体用法相似:

<a href="http://www.facebook.com/dialog/feed?app_id=...&amp;link=http%3A%2F%2Fmysite.org%2Findex.php%3Fpage%3Dcampaign%26campaign_id%3D18&amp;picture=http%3A%2F%2Fmysite.org%2Ffiles%2Fcampaign%2Fimage%2Foriginals%2F18%2FSans+titre-3.jpg&amp;name=Some text &quot;Text d&#039;Text&quot;, Text&amp;description=Rejoignez%20la%20campagne%21&amp;redirect_uri=http%3A%2F%2Fmysite.org%2Findex.php%3Fpage%3Dcampaign%26campaign_id%3D18"onclick="window.open(this.href);return false;">

在同一个网站上,所有的Facebook分享链接都运行良好,图像显示效果很好!之所以我认为这是特定图片无法正常工作的链接

2 个答案:

答案 0 :(得分:2)

逃生是你正在寻找的。看一眼: http://www.smarty.net/docsv2/en/language.modifier.escape.tpl

 {$filepath|escape:"url"}

urlencode用于编码(不是转义!)一个字符串,用作在作为GET var传递的URL中的查询部分:http://php.net/manual/en/function.urlencode.php

答案 1 :(得分:1)

网址编码空间是加号或%20。它们是等价的,并且都被解释为服务器上的空间。

如果你在URL中看到,那么服务器将看到一个空格。

你说加号阻止了图像的加载。这听起来比仅仅使用错误的编码更深层次的问题。可能它是双重编码的?

浏览器中请求的实际网址是多少?打开开发工具/ Firebug,查看要查找的请求。如果网址包含%2B,则加号将被双重编码。这是您需要解决的问题。

另一种解决方案当然不是在网络上的文件名中使用空格。人们想要文件名中的空格的唯一原因是为了便于阅读,但由于网络需要空间来进行urlencoded,因此无论如何都会删除这种可读性。带走空间,问题就会消失。