BackWPup の警告: XML エラー (9): PCDATA invalid Char value XX

2017/07/09WordPress

このブログはwordpress+VPSサーバーで運営している。なんらかの作業ミスやサーバーのハード障害で記事が消えてしまう可能性はあるので、BackWPup というプラグインでこまめにバックアップを取っている。BackWPup はAmazonS3やDropBoxなどのクラウドサービスにバックアップを残すこともでき大変便利である。世代管理もできる。

ところが、いつのまにかバックアップ時に警告が出ているのに気がついた。バックアップ処理自体は正常に終了しているので問題はないのだが、警告が出っぱなしだと気持ち悪い。週末で時間ができたので調査してみた。


警告メッセージ

本サーバーで運用している2つのブログで警告が出ていた。読んで字のごとく XML に含んではいけない制御文字 (^H と ^\)が存在するというエラー。なんかの間違い(操作ミス?)で制御文字が入ってしまったのだと考えられる。

警告: XML エラー (9): PCDATA invalid Char value 8

警告: XML エラー (9): PCDATA invalid Char value 28

制御文字を探して消す

BackWPup で作ったバックアップファイル(zip)を展開して、XMLを取り出し、その中を検索する。^H などの制御記号はshell上では CTRL-V CTRL-H で入力できる。

1件該当した。“Seer派”と書いてあるはずなのに“See派”になっているのが怪しい。

$ grep '^H’ *.xml
backwpup_XXXXXXXX.xml: <title>Ingress沖縄See派のためのポータル申請メモ</title>

16進ダンプしてみる。予想通りSeerの後に^H(08)が含まれている。これが悪さをしているようだ。

$ grep '^H’ backwpup_XXXXXXXXXX.xml|od -xc
0000000 0909 743c 7469 656c 493e 676e 6572 7373
t t < t i t l e > I n g r e s s
0000020 b2e6 e796 84b8 6553 7265 e608 beb4 81e3
346 262 226 347 270 204 S e e r b 346 264 276 343 201
0000040 e3ae 9f81 82e3 e381 ae81 83e3 e39d bc83
256 343 201 237 343 202 201 343 201 256 343 203 235 343 203 274
0000060 82e3 e3bf ab83 94e7 e8b3 8bab 83e3 e3a1
343 202 277 343 203 253 347 224 263 350 253 213 343 203 241 343
0000100 a283 2f3c 6974 6c74 3e65 000a
203 242 < / t i t l e > n

該当する記事を投稿一覧から編集してみると、タイトル入力部分でのカーソル移動がおかしい。何か見えない文字が入っているような動きをする。前後部分をばっさり削除して打ち直して修正。

再度、BackWPup を実行。警告は消えました。

エラーは記事内だけではない

もう一つのエラーも同様に調査。こちらも '\’ (0x1c)が含まれていた。

$ grep '^\’ *.xml
backwpup_XXXXXXXX.xml: <title>20170405-control-1</title>

# grep '^’ backwpup_XXXXXXXX.xml|od -xc
0000000 0909 743c 7469 656c 323e 3130 3037 3034
t t < t i t l e > 2 0 1 7 0 4 0
0000020 2d35 6f63 746e 6f72 2d6c 1c1c 3c31 742f
5 – c o n t r o l – 034 034 1 < / t
0000040 7469 656c 0a3e
i t l e > n
0000046

投稿一覧や固定ページ一覧を探したが記事が見つからない。さんざん探した挙句、メディアのタイトルに同じ文字を発見。

こちらも同様に修正して警告が消えることを確認。作業完了です。

なぜ制御文字が入ったのか?

投稿一覧から新規に記事を起こして再現テストをしてみたのですが、余計な制御文字を入れることはできませんでした。普通の手段では入力できないみたい。

検索してみると Mac OS X Yosemite で制御コードが入力されてしまう問題があったようですので、これかなあ?

WordPress

Posted by ず@沖縄