如何在Smarty中正确使用{$smarty.server.HTTP_HOST}{$smarty.server.REQUEST_URI}?
How to correctly use {$smarty.server.HTTP_HOST}{$smarty.server.REQUEST_URI} in Smarty?
我的网站上有一个博客页面,它使用 Smarty 创建帖子,我想使用它向它们添加一个 WhatsApp 分享按钮。我已经在整个互联网上搜索过了,我找到了这个:
{$smarty.server.HTTP_HOST}{$smarty.server.REQUEST_URI}
我正在尝试在我的 blog.tpl 文件中使用它:
<a class="whatsapp" href="whatsapp://send?text={$smarty.server.HTTP_HOST}{$smarty.server.REQUEST_URI}">Compartilhar</a>
我的代码有什么问题,我该如何解决?
您的代码无法正常工作有以下几个原因:
很明显,您生成的消息不是 URL。它的内容类似于:Whosebug/questions/40062450/...
。 URL 以协议开头(通常是 http://
)。您发送的文本应该是:
http://{$smarty.server.HTTP_HOST}{$smarty.server.REQUEST_URI}
一个URL(如上面代码生成的)包含特殊字符,当它在另一个URL中用作参数时必须进行编码(f.e.&
).当您想将 &
用作 URL 中的参数时未能正确编码会导致生成与您想象的不同的 URL。为此,Smarty 提供了 escape
变量修饰符。
你生成了HTML,因为有些字符在HTML中也很特殊,所以你必须对它们进行正确的编码,否则你生成的HTML可能是无效的并且浏览器可能认为 URL 比您预期的要早结束。 escape
修饰符也可以帮助您。
综上所述,最好的方法是将URL构建成一个单独的Smarty variable
,然后将其写入href
属性:
{!--
* Generate the URL we want to send using WhatsApp
* and store it in the $url Smarty variable
* There is no encoding here
* --}
{capture assign=url}{strip}
http://{$smary.server.HTTP_HOST}{$smarty.server.REQUEST_URI}
{/strip}{/capture}
{!--
* The URL to invoke the WhatsApp app (and ask it to send $url as message) is:
* whatsapp://send?text={$url|escape:url}
* --}
{!--
* Generate correct HTML that contains the correct whatsapp URL
* that contains as parameter the URL generated in $url
* --}
<a class="whatsapp" href="whatsapp://send?text={$url|escape:url|escape:html}">Compartilhar</a>
我的网站上有一个博客页面,它使用 Smarty 创建帖子,我想使用它向它们添加一个 WhatsApp 分享按钮。我已经在整个互联网上搜索过了,我找到了这个:
{$smarty.server.HTTP_HOST}{$smarty.server.REQUEST_URI}
我正在尝试在我的 blog.tpl 文件中使用它:
<a class="whatsapp" href="whatsapp://send?text={$smarty.server.HTTP_HOST}{$smarty.server.REQUEST_URI}">Compartilhar</a>
我的代码有什么问题,我该如何解决?
您的代码无法正常工作有以下几个原因:
很明显,您生成的消息不是 URL。它的内容类似于:
Whosebug/questions/40062450/...
。 URL 以协议开头(通常是http://
)。您发送的文本应该是:http://{$smarty.server.HTTP_HOST}{$smarty.server.REQUEST_URI}
一个URL(如上面代码生成的)包含特殊字符,当它在另一个URL中用作参数时必须进行编码(f.e.
&
).当您想将&
用作 URL 中的参数时未能正确编码会导致生成与您想象的不同的 URL。为此,Smarty 提供了escape
变量修饰符。你生成了HTML,因为有些字符在HTML中也很特殊,所以你必须对它们进行正确的编码,否则你生成的HTML可能是无效的并且浏览器可能认为 URL 比您预期的要早结束。
escape
修饰符也可以帮助您。
综上所述,最好的方法是将URL构建成一个单独的Smarty variable
,然后将其写入href
属性:
{!--
* Generate the URL we want to send using WhatsApp
* and store it in the $url Smarty variable
* There is no encoding here
* --}
{capture assign=url}{strip}
http://{$smary.server.HTTP_HOST}{$smarty.server.REQUEST_URI}
{/strip}{/capture}
{!--
* The URL to invoke the WhatsApp app (and ask it to send $url as message) is:
* whatsapp://send?text={$url|escape:url}
* --}
{!--
* Generate correct HTML that contains the correct whatsapp URL
* that contains as parameter the URL generated in $url
* --}
<a class="whatsapp" href="whatsapp://send?text={$url|escape:url|escape:html}">Compartilhar</a>