WordPressの致命的問題

なんかバックスラッシュがエスケープ文字扱いされていて、本文に書いても表示されない。二つ並べれば表示されるけど、そもそもエスケープ文字扱いする方がおかしいしWordPressからほかに移行したくなったときにコンバートしないといけない。
#3066 (backslash disappears in <pre>) – WordPress Trac – Trac によれば、これは<pre>の中だけで起こる問題らしいです。speech markのためにバックスラッシュ追加してるとかなんとか書いてあるけど、これが仕様ってこと?
speech markがなんなのかしらないけど、問題出るまで無視ってことで wp-includes/formatting.php を書き換え。

--- formatting.2.1.2.php Tue Jun 26 13:43:24 2007
+++ formatting.php Tue Jun 26 13:43:54 2007
@@ -78,8 +78,6 @@
        }
        $pee = preg_replace('!(</?' . $allblocks . '[^>]*>)\s*<br />!', "$1", $pee);
        $pee = preg_replace('!<br />(\s*</?(?:p|li|div|dl|dd|dt|th|pre|td|ul|ol)[^>]*>)!', '$1', $pee);
- if ( strstr( $pee, '<pre' ) )
- $pee = preg_replace('!(<pre.*?>>)(.*?)</pre>!ise', " stripslashes('$1') . stripslashes(clean_pre('$2')) . '</pre>' ", $pee);
        $pee = preg_replace( "|\n</p>$|", '</p>', $pee );

この方法だとpreの中に空行があるとそこでcodeが閉じられちゃうみたいです。なので元に戻しました。勝手なことすんなよ….

でさー、はじめ全部削らないでコメントアウトにしようとしたの。


# if ( strstr( $pee, '<pre' ) )
# $pee = preg_replace('!(<pre.*?>)(.*?)</pre>!ise', " stripslashes('$1') . stripslashes(clean_pre('$2')) . '</pre>' ", $pee);

こうしたら、コメントアウトしているにもかかわらずpreg_replaceの中にある ?> のところで <?php を閉じることになってるみたいで、今度はPHPがエラー出してきてもうほんとにアタマにきた。おかしくねそれ。

ちなみにPHP5.2.2です。


About this entry