编码get_the_title()为Twitter分享网址(Encoding get_the_tit

2019-07-29 14:36发布

我使用的是直接链接与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()的称号,但是当我做到这一点,在状态消息显示特殊字符。

既然你不需要+[space]在Twitter分享现在,我需要更换任何& “s的&amp; 。 然而,这似乎并没有一起工作str_replace() 。 它的一些原因输出HTML特殊字符。 做类似<?php echo str_replace('&', '&amp;', urldecode(get_the_title())); ?> <?php echo str_replace('&', '&amp;', urldecode(get_the_title())); ?>也不起作用。

Answer 1:

&在网址中有特殊的意义,分离的几个参数。 如果您的网址是...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'));

可能有其他的方式来获得原题,而不直接从WordPress的HTML实体,而无需做复杂html_entity_decode舞蹈,但同样,我不知道了很多关于WordPress的。


PS:既然你是输出URL到HTML背景下,你应该再次HTML编码的网址,以确保它不会破坏你的HTML语法。 这主要是为学术完整性虽然, urlencode()应该返回任何可以打破HTML语法。 但只是迂腐的完整性,在这里:

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


文章来源: Encoding get_the_title() for Twitter share URL