为Twitter共享URL编码get_the_title()

时间:2012-05-27 04:48:27

标签: php wordpress twitter

我在Twitter上使用带弹出按钮的直接链接: <a href="https://twitter.com/intent/tweet?url=<?php echo urlencode(get_permalink());?>&amp;text=<?php echo get_the_title(); ?>&amp;via=username" target="_blank"

有了所有疯狂的社交媒体插件,这是我实现分享按钮最简单,最直接的方式。

但是,当标题中有&时,标题将破坏应该为状态显示的文本。我知道您需要urlencode()标题,但是当我这样做时,它会在状态消息中显示特殊字符。

由于您现在不需要在Twitter共享中+ [space],我需要将&替换为&amp;。但是,它似乎不适用于str_replace()。它由于某些原因输出HTML特殊字符。像<?php echo str_replace('&', '&amp;', urldecode(get_the_title())); ?>这样的事情也不起作用。

1 个答案:

答案 0 :(得分:42)

&在URL中具有特殊含义,用于分隔多个参数。如果您的网址为...a&b...,但不代表文字&#34; a&amp; b&#34;,则表示两个独立的参数。为避免这种情况,您需要urlencode&转换为%26的文字。

只有&字符才能将&amp;编码到&,而您的文字中不应包含这些字符,因为所有&都被{{%26替换1}}。

我不知道Wordpress的复杂性,但我认为get_the_title()会返回已经转义为HTML的值。意思是,它包含&amp;而不是&,因此,如果你发送它就是发送给Twitter的值。你想要的是获得没有HTML实体的文本,即你需要对其进行HTML解码才能将&amp;变回实际值&。然后,HTML解码的值需要进行URL编码,因此它不会搞砸您的URL语法。

总而言之,这应该是有希望的:

echo urlencode(html_entity_decode(get_the_title(), ENT_COMPAT, 'UTF-8'));

可能还有其他方法可以直接从Wordpress获取没有HTML实体的原始标题,而无需进行复杂的html_entity_decode舞蹈,但同样,我不太了解Wordpress。


PS:由于您将该网址输出到HTML上下文中,因此您应该再次对该网址进行HTML编码,以确保它不会破坏您的HTML语法。这主要是为了学术上的完整性,urlencode() 应该不会返回任何可能破坏HTML语法的东西。但只是为了迂腐的完整性,这里:

echo htmlspecialchars(urlencode(html_entity_decode(get_the_title(), ENT_COMPAT, 'UTF-8')), ENT_COMPAT, 'UTF-8');