2

我有一個網站可以生成包含日語字符的元標記作爲Open Graph協議的一部分。然而,通過履帶運行網站???問題標記在使用Prerender.io的AngularJS應用程序的社交網絡爬蟲的元標記中

https://www.inkgrph.com/e/210

時,即

https://developers.facebook.com/tools/debug/

meta標籤content屬性的日文字符都顯示爲???????在「原始的Open Graph文檔信息」

其它網站如

http://tabelog.com/

似乎顯示在meta標籤罰款日文字符。我試圖在沒有運氣的HTML設置

lang="ja" xml:lang="ja"

<meta http-equiv="Content-Language" content="ja">

任何幫助,將不勝感激!

+0

我不知道到底發生了什麼。但是我檢查了你的頁面響應頭文件,而在「content-type」頭文件中缺少一個字符集。嘗試將你的''content-type''頭部設置爲''content-type:text/html; charset = utf-8'' –

回答

3

問題是該網站在其響應中沒有字符集,所以Facebook必須假設一個字符集,並且它可能假設ANSI將所有未知字符轉換爲問號。根據語言的不同,實現方式也有所不同,但您可以通過Google搜索「HTTP標頭字符集language」找到關於如何實現的說明。你的HTTP標頭應該是這樣的:

Content-Type: text/html; charset=utf-8 

一個例子來完成這項工作,在PHP它只是:

header('Content-Type: text/html; charset=utf-8'); 

,然後Facebook將知道的字符集是UTF-8,因此贏得了」不再將日文字符轉換爲問號。 W3 also made a short list of code examples

我已經測試過我自己來驗證,並且當我製作了一個與此相同標題回覆的文件時,Facebook確實正確處理了日文字符。


通過您的評論,實際的URL爬蟲使用https://www.inkgrph.com/e/210?_escaped_fragment_=去,我明白爲什麼Facebook的認爲字符是問號:這是因爲他們是。當我在瀏覽器中打開該頁面時,它也會顯示問號。這意味着問題出在你的服務器上,而不是Facebook的頁面處理。

現在有什麼問題,最有可能的是,你的服務器確實回覆內容類型是UTF-8,但服務器上的實際內容類型仍然是ASCII,所以它改變了日語服務器上的字符。

要解決這個問題,您應該確保服務器上的所有文件都以UTF-8編碼存儲。將來,將默認字符編碼設置爲UTF-8(here's how to do it in Notepad++this is for Sublime Text;嘗試使用您自己的文本編輯器的Google搜索)可能會很有用。但現在,你將不得不改變自己的字符編碼。您可以手動執行此操作,也可以嘗試使用Google自動搜索的方式。

我發現的是this SO question它已經涵蓋了自動charencoding轉換。您也可以嘗試this Notepad++/Python approach,但是如果您嘗試更具體地針對每種語言(例如,「將文件轉換爲UTF-8 Python」),則可以輕鬆找到方法來執行此操作(Python,​​)。

+0

我不確定是否是這樣。所以我留下評論。 Upvote for you! –

+0

我認爲這是問題,但Facebook看到的實際頁面實際上是https://www.inkgrph.com/e/210?_escaped_fragment_=,它具有「Content-Type」標題。 我實際上使用Phantom-JS來緩存我的頁面以便抓取,因爲我的元數據都是通過Javascript生成的。 – Luke

+0

@Luke是否有幫助?如果在你的文件上改變你的charencoding不起作用,請告訴我,所以我可以在轉換後再看看你的頁面是什麼樣的。 – Joeytje50