スポンサード リンク

 ワードプレスにて記事投稿時に本文が途中で切れてしまう現象について少ないとは思いますが、同じ現象で困っている方のために。

スポンサード リンク

最近ツイートを引用する記事を投稿する際、投稿後に本文が途中で切れてしまう現象を何度か経験しました。

一応投稿前に本文を全部確認するのですが、それが投稿後には中途半端な位置で切れ、それ以降が保存されないのです。

ワードプレスの場合、通常であれば記事作成途中にPCが落ちたりしても自動保存によりほとんど戻り作業は発生しません。
ですがこの現象では、数十分、数時間掛けて書いた記事がどこにも残らないということですから場合によっては発狂モノです。

何が原因なのか色々と探っていたのですが、やっと特定出来ました。

原因

現象を探っていくと、記事本文中にutf-8の4バイト以上の文字が含まれている場合、その文字以降が消えているようでした。

utf-8はマルチバイト文字と呼ばれる形式で文字コードを管理しています。
要するに文字の種類によって対応する文字コードの長さがことなる体系で、半角英数字等は1バイトで表されるのに対して、ひらがな等は3バイトで表されます。

utf-8は仕様上、4バイト以上の文字も扱うことができます。
ですが、ワードプレスのデータベースとして採用されているMySQLはVer.5.5.3未満では4バイト以上の文字に対応していません。

その為本文中だけに限らず、何らかの文字列をデータベースに保存する場合に文字列中に4バイト文字以上が含まれていると、その文字以降が勝手に切られてしまうようです。

一部の携帯電話用の絵文字などは4バイト文字に割り当てられており(厳密にはツイッター投稿時に4バイト文字に変換されているらしい)、これが含まれるツイートを引用する場合、MySQLのバージョンによっては記事が途中で切れてしまうのでした。
通知メッセージなども一切ありませんので完全にバグですね。

 

ちなみに当サイトはXサーバーを使用していますが、Xサーバーの場合割り当てられているサーバーによってMySQLのバージョンが固定です。(5.0.xか5.5.x)

当サイトの場合は5.0.xのサーバーに割り当てられているので、4バイト以上文字が使えなかったということですね。

対策

とりあえず本文中に含まれる4バイト以上の文字を削除することで対応します。

MySQLのバージョンを5.5.3以上に変更できるのであればそれが一番ですが、レンタルサーバーの場合そうもいかないので仕方がありません。

方法としては、ワードプレスのプラグインAPIを使って記事保存時に呼び出されるフックに4バイト文字削除用の関数を追加します。

同じ現象に困っている方のためにプラグイン化してみました。

使用手順

  1. 以下のページに移動してください。

花月速報!自作ソフト置き場(フェイスブックページ)

  1. 「花月速報!fb出張所」をいいね!して頂くと、ページの表示が切り替わります。
    表示された一覧から『4バイト文字削除プラグイン』をクリックし、zipファイルをローカルに保存して下さい。
  2. zipファイルを解凍して現れるフォルダを、自身のサイトのwp-content/pluginsにftp経由でアップロードして下さい。
  3. ワードプレス管理画面のプラグイン一覧に「Delete-4byte-char」というプラグインが表示されているはずなので、それを有効化して下さい。

これで記事を投稿する際、データベースに書き込まれる前に4バイト文字は全て削除されるので変なところで切れたりすることは無くなります。

まとめ

発狂モノ、というか実際発狂しかけました(笑)
2時間掛けて書いた記事がほとんど全部消えてしまいましたので。

自動保存の履歴も全て同じ所で切れていますし、復旧する術がないんですよね。

警告なども一切無いため、普通に投稿できたと思って数日後とかに確認すると変なところで切れてたり。

 

無駄な時間を使ってしまいました。

それでは。


このエントリーをはてなブックマークに追加


この記事のトラックバック用URL