脸书分享帖子显示UTF8字符�无效

时间:2017-12-31 作者:SagiLow

我尝试分享我网站上的帖子<问题是,一些帖子的描述中出现了著名的问号菱形
所有OG元看起来都不错(使用Yoast SEO),这只是分享帖子本身的文本� 签名<我理解这可能是由于一些文件没有用utf-8编码
我添加了default_charset = UTF-8 给我的.ini 文件,但没有更改
Thecontent-type 也正确设置为utf-8
我还对w3 validator 没有发现任何相关信息

该网站显示得很好,没有奇怪的字符,只有在尝试在Facebook上共享帖子时才会出现
如何找到错误编码的来源?

2 个回复
最合适的回答,由SO网友:SagiLow 整理而成

我发现了问题所在Facebook会截断此字符串,共享帖子以将描述保持在最大字符数以下
但是,它们可能会截断中间的多字节字符,这将导致UTF8无效字符:�
这个问题实际上在所有多字节网站上都会重复出现
我找到的唯一解决方法是限制og:description 根据Facebook的最大字符数(评论中约110个字符,帖子中约300个字符),我已经向Facebook OpenGraph平台提交了一个bug,我希望它能很快得到修复。

SO网友:bueltge

我认为在您的WP安装中没有问题。该网站的工作方式是编码UTF-8,还有你的feed等。

验证字符串应使用PHP函数mb_check_encoding. 一个小脚本应该检查您的数据库表、内容,以便您对数据库表中的数据有反馈。

还有图书馆tchwork-grekas/utf8 有助于发现问题,还可以修复错误的字符串。

通过自定义脚本修复它们,但是如果您只在数据库中搜索,那么通过插件搜索字符串应该会对您有所帮助。另一种选择是自定义脚本,用于检查和修复它们。我认为forceutf8 图书馆很有帮助。方法fixUTF8 如果数据中有问题,请修复问题。

另一种选择是第一个摘要中的库Patchwork-UTF8,见上文。

mySQL表排序规则之前,您应该检查所有表的排序规则。通过查看SHOW TABLE STATUS (在phpMyAdmin或Adminer中,这显示在表列表中)。

SHOW TABLE STATUS FROM <YOUR_DATABASE>
mySQL变量也可以检查每个变量,在数据库中运行follow mySQL命令,以验证所有内容都已正确设置为使用UTF-8编码。

SHOW VARIABLES LIKE \'char%\';
将表格转换为InnoDB和utf8mb4posts 桌子

ALTER TABLE wp_posts ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
ALTER TABLE wp_posts CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
检查WP配置wp-config.phputf8mb4 是您自WordPress 4.2以来的选择,完全支持UTF-8。

define( \'DB_CHARSET\', \'utf8mb4\' ); 
链接Helpful post 关于从非UTF-8数据库切换到UTF-8,了解更多详细信息
  • Solving PHP MySQL UTF-8 issues
  • 结束

    相关推荐