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、プラス記号が二重にエンコードされています。これはあなたが解決する必要がある問題です。

もちろん、もう 1 つの解決策は、Web 上のファイル名にスペースを使用しないことです。ファイル名にスペースが必要な唯一の理由は読みやすさのためですが、Web ではスペースを urlencode する必要があるため、とにかく読みやすさが失われます。スペースを取り除けば、問題は自然に解消されます。

于 2013-01-15T12:18:38.697 に答える