为Twitter共享URL编码get_the_title()

AAA*_*AAA 11 php twitter wordpress

我在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())); ?>也不起作用.

dec*_*eze 45

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

编码&&amp;只对必要&的HTML字符,你不应该在你的文字有,因为所有&S被取代%26.

我不知道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'));
Run Code Online (Sandbox Code Playgroud)

可能有其他方法可以直接从Wordpress获取没有HTML实体的原始标题,而无需进行复杂的html_entity_decode舞蹈,但同样,我对Wordpress知之甚少.


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

echo htmlspecialchars(urlencode(html_entity_decode(get_the_title(), ENT_COMPAT, 'UTF-8')), ENT_COMPAT, 'UTF-8');
Run Code Online (Sandbox Code Playgroud)

  • 在我看来,这是其中一个应该得到比现有更多的支持者的答案之一.很好的答案与恒星的解释.救了我一些头疼的事. (3认同)