为啥 Facebook 帖子中的特殊字符显示为问号?

Posted

技术标签:

【中文标题】为啥 Facebook 帖子中的特殊字符显示为问号?【英文标题】:Why are special characters displayed as question marks in Facebook posts?为什么 Facebook 帖子中的特殊字符显示为问号? 【发布时间】:2020-05-04 11:16:30 【问题描述】:

当我们共享指向我们的 magnolia 网站(在 Tomcat 上运行)的链接时,变音符号显示为问号。 页头有<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />,响应头有内容类型text/html;charset=UTF-8和内容编码gzip。什么可能导致 Facebook 上的字符编码错误?

【问题讨论】:

可能他们不是实际上没有正确编码为UTF-8?仅仅因为您他们是通过Content-Type,并不会自动使如此。 @CBroe,如何检查实际编码?我导出了页面的JCR-Node,第一行指定了编码:<?xml version="1.0" encoding="UTF-8"?> 您有显示问题的实际示例 URL 吗? Facebook 共享调试器生成以下内容:curl -v --compressed -H "Range: bytes=0-524288" -H "Connection: close" -A "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)" "https://www.mieterverband.ch/mv/politik-positionen/news/2019/Jetzt-w%C3%A4hlen-f%C3%BCr-mieterfreundliche-Mehrheiten-in-Bern.html",这会产生没有内容的响应。如果我遗漏了Range 字段,我会收到消息正文。所以过去Facebook可以爬取网站的时候,可能是编码错误,但现在问题似乎是Facebook无法爬取页面。 它究竟在哪里生成这个 cURL 代码?不确定它会从哪里获得该字节范围。该 URL 返回一个包含标题 Content-Length: 12298 的响应,所以我看不出从哪里可以得到请求 bytes=0-524288 开头的想法。 【参考方案1】:

最后我发现,我的问题与字符编码无关,而与 Facebook 爬虫请求有关。 Facebook Sharing Debugger 真的让我走上了正轨。核心问题是,magnolia 缓存不支持部分请求。

编辑: 来自 Facebook 的 HTTP 范围请求是一个已知问题,请参阅 https://documentation.magnolia-cms.com/display/DOCS62/_Known+issues#id-_Knownissues-HTTPrangerequestsfromFacebookdon%27twork

【讨论】:

以上是关于为啥 Facebook 帖子中的特殊字符显示为问号?的主要内容,如果未能解决你的问题,请参考以下文章

显示带有问号的菱形等特殊字符的网站

FreeMarker 特殊字符输出为问号

PHP/HTML 中的所有特殊字符都是问号

UTF-8 中的特殊字符在 MYSQL 中使用 magento 存储为带问号的菱形

用SQLyog的时候,创建的表中的汉字为啥显示是问号?

在数据库表里输入汉字后变成问号????这是为啥??