关于php:为Twitter共享URL编码get_the_title()

Encoding get_the_title() for Twitter share URL

我在Twitter上使用带有链接的共享按钮的弹出式直接链接:
&text=&via=username" target="_blank"

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

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

由于您现在在Twitter共享中不需要+作为[space],因此我需要将所有&替换为&。 但是,它似乎不适用于str_replace()。 由于某些原因,它输出HTML特殊字符。 做类似的操作也不起作用。


&在URL中具有特殊含义,用于分隔多个参数。如果您的URL是...a&b...,则不表示文本" a&b",则表示两个单独的参数。为避免这种情况,您需要urlencode文本,该文本会将&转换为%26

只有将&编码为&的HTML中的&字符才是必需的,这在文本中不应该包含,因为所有&都由%26代替。

我不知道Wordpress的复杂性,但我认为get_the_title()返回的值已经是HTML转义的。意思是,它包含&而不是&,因此,如果您像这样发送,则它是发送到Twitter的值。您想要的是获取没有HTML实体的文本,即您需要对其进行HTML解码,以将&转换为实际值&。然后,需要将HTML解码后的值进行URL编码,因此不会破坏您的URL语法。

放在一起,这有望实现:

1
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语法的内容。但仅出于学问完整性,请在此处:

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