2013-05-06 57 views
4

我在我的網站上與og:title標記進行了輕微的鬥爭。每當文章標題有撇號並在Facebook上共享時,'就會顯示出來,而不是撇號。我比我的元標記朋友的網站,成功地顯示了他的撇號,我能找到的唯一的區別是:htmlspecialchars將撇號轉換爲'對於臉譜og:標題標記

代碼放置在OG撇號:標題爲我的網站: '

代碼對於放置在OG撇號:標題爲朋友的網站: '

我覺得我的網站是在已經轉換的撇號後轉換符號,那就是使其顯示爲'在Facebook上。

我對Joomla!使用K2,並且在他們的論壇上提出了這個問題,但是我現在還沒有在5天內收到過單個回覆。

這是我在com_k2>意見>的項目發現> view.html.php文件中的代碼:

$document->setMetaData('og:title', htmlspecialchars($document->getTitle(), ENT_QUOTES, 'UTF-8')); 

我不是PHP的精明,有什麼辦法可以改變此代碼會顯示正確嗎? 如果有幫助,這裏有一個link來自網站標題中帶有撇號的文章。

謝謝你的時間。

回答

3

請參閱the documentation for htmlspecialchars並查看它將何時轉換單引號(通常用作撇號)的描述。如果設置了ENT_QUOTES,它將只編碼單引號,並且在調用htmlspecialchars時設置了ENT_QUOTES

如果您不希望單引號被編碼,那麼您只需停止使用該標誌並將其切換爲ENT_COMPAT(其編碼雙引號而不是單引號),以便您的語句變爲:

$document->setMetaData('og:title', 
     htmlspecialchars($document->getTitle(), 
     ENT_COMPAT, 'UTF-8')); 

(我已經添加了換行符,因此很容易在此網頁上閱讀,但不要在你的實際代碼添加換行符。)

還要注意的是用htmlspecialchars具有最終,可選參數(在PHP 5.2.3中添加),稱爲double_encode。它默認爲true,但是如果您將此參數設置爲false,那麼PHP將不會對現有實體進行編碼,因此即使您對單引號進行了編碼,生成的'也不會通過進一步調用htmlspecialchars進一步編碼爲',保留爲'