[英]Encoding get_the_title() for Twitter share URL
我在推特上使用弹出窗口直接链接分享按钮: <a href="https://twitter.com/intent/tweet?url=<?php echo urlencode(get_permalink());?>&text=<?php echo get_the_title(); ?>&via=username" target="_blank"
有了所有疯狂的社交媒体插件,这是我实现共享按钮最简单,最直接的方式。
但是,当标题中有&
时,标题将破坏应该显示状态的文本。 我知道你需要urlencode()
标题,但是当我这样做时,它会在状态消息中显示特殊字符。
既然你现在不需要在Twitter中共享[space]
+
,我需要用&
替换任何&
。 但是,它似乎不适用于str_replace()
。 它由于某些原因输出HTML特殊字符。 做一些像<?php echo str_replace('&', '&', urldecode(get_the_title())); ?>
<?php echo str_replace('&', '&', urldecode(get_the_title())); ?>
也不起作用。
&
在URL中具有特殊含义以分隔多个参数。 如果您的网址是...a&b...
,它不代表文字“a&b”,则代表两个单独的参数。 为了避免这种情况,需要urlencode
文本,果然&
到%26
。
编码&
&
只对必要的&
在HTML字符,你不应该在你的文字,因为所有&
S被替换%26
。
我不知道Wordpress的复杂性,但我认为get_the_title()
返回一个已经HTML转义的值。 意思是,它包含&
而不是&
,所以如果你发送它就是发送给Twitter的价值。 你想要的是获得没有HTML实体的文本,即你需要对它进行HTML解码才能转向&
回到实际值&
。 然后,HTML解码的值需要进行URL编码,因此不会搞砸您的URL语法。
总而言之,这应该是有希望的:
echo urlencode(html_entity_decode(get_the_title(), ENT_COMPAT, 'UTF-8'));
可能有其他方法可以直接从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');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.