2

我使用 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 共享链接都可以正常工作,并且图像显示良好!我认为是该特定图像的链接不起作用的原因

4

2 回答 2

4

逃避是你正在寻找的东西。看看: 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

于 2013-01-15T12:13:09.657 回答
1

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

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

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

浏览器中请求的实际 URL 是什么?打开开发工具/Firebug,查看请求以找出答案。如果 URL 包含%2B,则加号被双重编码。这是您需要解决的问题。

当然,另一种解决方案是不在网络上的文件名中使用空格。文件名中需要空格的唯一原因是为了可读性,但由于 Web 需要对空格进行 urlencoded,所以无论如何它都会消除这种可读性。拿走空间,问题就会自行消失。

于 2013-01-15T12:18:38.697 回答