タグ別アーカイブ: PHP

WordPressで投稿文が表示されない問題に遭遇した

このへん。

 小説を掲載しようと思って、テキストファイルをWPの入力欄へコピペし、プレビュー表示させたところ、まったく記事本文が表示されなくなるという不具合に遭遇しました。
 タイトルは表示されるのですが、記事本文だけなにも表示されていません。長文だったので、文字数制限を疑ったのですが、DBを見てみると、無事に格納されています。MySQLのカラム方もlongtextだったので、文字数制限の線はない感じでした。
 仕方なく、ソースを追いかけてみると、テンプレートのthe_contentの戻り値の時点で空っぽの様子です。さらにソースを追いかけてみると、フィルタ処理のwpautop関数で、値が空になっていることがわかりました。
 wp-includes/formatting.phpの135行目の正規表現置換で、戻り値がnullになっていることがわかりました。戻り値がnullになっているということは、正規表現処理でエラーが出ているということです。
 試しに、およそ同じ文字数の小説をWPに投稿してみると、こちらはすんなりと通ります。おそらく、問題は文字数ではなく、文字の並びなのでしょう。どこがいけないのか、表示できるようになるまで、小説本文を削りながら地道に調査してみました。
 すると、

「あたし、ああいう面倒ごとって、もうなんかとにかく苦手で。ずっとシカトしてようと決めてたんですけど。もう、今日という今日は、頭にきちゃって」僕は緊張のあまりたこ焼きを一つも食べられないのに対し、彼女はぱくぱくといくつも口にほおばりながら、愛想良くぺらぺらと言葉を続けた。「他人の男をとったとか、イチャモンつけてくるんですもん。そんなの、ぜんぜん向こうの思い違いだし。だいたい、向こうが一方的に惚れてきただけで。それに、あたし、恋愛とかそういうのってまだ早いと思うんですよね。だってあたし、中一ですもん」

 この部分を追加すると、正規表現処理でエラーが出る様子です。さらに文章を削ると、途中の「だいたい、」という部分でエラーになることがわかりました。「だいたい」だとオーケイなのですが、「だいたい、」だとダメなのです。謎です。
 ためしに「だいたい向こうの」と句読点を取っ払って見てもダメでした。「だいたい*」がいけないようす。
 たぶん、PHP側のマルチバイト処理にバグがあって、そこで引っかかっている様子。ためしに、上の引用文だけを記事に投稿すると、すんなりと通ります。おそらく、すべての文字の並びに、なにかしら引っかかる部分があるのでしょう。
 使っているサーバーのPHPバージョンは5.2.8でした。うーん。謎です。
 ひとまず、文章を変えるという手段でなんとか対応したいと思います。

 追記
 該当の箇所の表現を変えたのですが、それでもやはりダメでした。具体的にどのマルチバイト文字の並びに引っかかっているのかは不明でしたが、文章の途中で改行を続けて入れること(つまり、改行だけの段落を入れることで)で、この問題を回避することができました。うーん、文章のブロックが長すぎたとか、そういう問題なのか、原因は不明です。まぁ、PHPのマルチバイト処理のバグなんだとは思いますが。