2012-05-27 57 views
10

我使用了彈出一個直接鏈接在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"編碼get_the_title()爲Twitter分享網址

與所有瘋狂的社交媒體插件在那裏,這是最簡單,最直接的我實現分享按鈕的方式。

但是,如果標題中有&,標題將打破應顯示狀態的文本。我知道你需要urlencode()標題,但是當我這樣做時,它會在狀態消息中顯示特殊字符。

因爲你不需要在Twitter上[space]一個+現在分享,我需要&amp;更換任何&的。但是,它似乎不適用於str_replace()。它由於某些原因輸出HTML特殊字符。做類似<?php echo str_replace('&', '&amp;', urldecode(get_the_title())); ?>的東西也不起作用。

+0

你是什麼意思,但是當我這樣做,它顯示狀態消息中的特殊字符「?什麼是您輸出的最終HTML以及它在Twitter上的顯示效果如何? – deceze

+0

它將特殊字符輸出到實際狀態消息中。所以,你可以在這裏看到:https://twitter.com/intent/tweet?url=http%3A%2F%2Fgoogle.com&text=%26%238216%3BMr.+Blah+%26%23038%3B+Mrs 。+ Blah&via = username – AAA

回答

41

&在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')); 

可能有其他的方式來獲得,而不直接從WordPress的HTML實體的原題,而無需做複雜html_entity_decode舞蹈,但同樣,我對Wordpress一無所知。


PS:既然你是輸出URL到HTML背景下,你應該HTML再編碼的URL,以確保它不會破壞你的HTML語法。這主要是爲了學術的完整性,urlencode()應該不返回任何可以打破HTML語法的東西。但僅僅爲了迂腐完整性,在這裏:

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

據我所知,這就是我最初對它進行編碼的原因,但問題在於,當我編碼整個文本時,特殊的HTML字符顯示爲實際狀態。請參閱此處的示例:https://twitter.com/intent/tweet?url=http%3A%2F%2Fgoogle.com&text=%26%238216%3BMr.+Blah+%26%23038%3B+Mrs.+Blah&via=用戶名 – AAA

+0

爲什麼你在URL中有特殊的HTML字符?再一次,輸出的實際HTML是什麼? – deceze

+0

我正在使用'get_the_title()',以便我可以用'text = get_the_title()'來發送一些信息。在帖子的標題中偶爾會有''''或'&',這並不罕見。正在輸出的實際HTML是編碼的'get_the_title()',但正如我之前所說的,問題在於Twitter正在輸出狀態中的特殊字符。我已經谷歌搜索這個問題,似乎沒有人有明確的解決方案,因爲它顯然是一個已知的問題。 ^我剛剛向您展示了正在輸出的實際HTML。 – AAA