私は自分のウェブサイトからの投稿を共有しようとしています。
問題は、投稿の説明の一部にダイヤモンドが表示されている有名な疑問符です。
すべてのOG Metaは(Yoast SEOを使用して)見栄えがよく、この 記号が付いているのは共有投稿自体の「ちょうど」テキストです。
それはおそらく、いくつかのファイルがutf-8でエンコードされていないことが原因であると理解しています。default_charset = UTF-8
ファイルに.ini
を追加しましたが、変更はありません。content-type
もutf-8
に正しく設定されています
w3バリデーター で妥当性検査もしましたが、関連するものは見つかりませんでした
ウェブサイトは奇妙な文字がなくても問題なく表示されます。Facebookで投稿を共有しようとしたときだけです。
間違ったエンコーディングの原因をどうやって見つけることができますか?
私は問題を見つけました。
UTF8はマルチバイト文字列を生成することがあります(たとえばヘブライ文字を使用する場合)。
Facebookは、説明を最大文字数以下に保つために投稿を共有するこの文字列を切り捨てます。
ただし、途中でマルチバイト文字が切り捨てられ、UTF8の無効な文字になる可能性があります。
この問題は実際にはすべてのマルチバイトWebサイトで再現されています。
私が見つけた唯一の回避策は、Facebookの最大文字数(コメントで約110文字、投稿で300文字)にog:description
を制限することです。 。
WPのインストールでは問題ないと思います。このサイトはUTF-8、あなたのフィードなどのエンコーディングとして機能します。
文字列の検証にはPHP関数 mb_check_encoding
を使うべきです。データベーステーブル内のデータについてのフィードバックがあるように、小さなスクリプトでデータベーステーブル、内容をチェックします。
Libraray tchwork-grekas/utf8 も役立ちます。問題を見つけるためにも間違った文字列を修正します。
ただし、データベースを検索するだけの場合は、プラグインを使用して文字列を検索すると役に立ちます。代わりのものは、それらをチェックして修正するカスタムスクリプトです。 forceutf8 ライブラリが役に立つと思います。データ内にある場合は、メソッドfixUTF8
で問題を解決できます。
代わりのものは最初の要約のPatchwork-UTF8ライブラリでもあります。上を見てください。
すべてのテーブルの照合順序を確認してください。 SHOW TABLE STATUS
の出力の照合値を調べることでそれらのエンコーディングをチェックします(phpMyAdminまたはAdminerではこれはテーブルのリストに表示されます)。
SHOW TABLE STATUS FROM <YOUR_DATABASE>
各変数をチェックし、データベースでfollow mysqlコマンドを実行して、すべてがUTF-8エンコーディングを使用するように正しく設定されていることを確認することもできます。
SHOW VARIABLES LIKE 'char%';
テーブルをInnoDBとutf8mb4、posts
テーブルに変換します
ALTER TABLE wp_posts ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
ALTER TABLE wp_posts CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
wp-config.php
をチェックしてくださいutf8mb4
はWordPress 4.2以降のあなたの選択です、完全なUTF-8サポート。
define( 'DB_CHARSET', 'utf8mb4' );