文字コードがおかしいファイルをincludeやrequireすると何も表示されなくなる

wordpressのpageテンプレートを動的に生成してる。
すると表示させたときに???????????????といったハテナの連続だとか、何も表示されない現象が発生。
これはページのテンプレートに文字コードの表に存在しないようなコードが入ってると発生するらしい。emacsだとまったく読み込めない。xyzzyは頭よくて結構いい感じに読んでくれる。
バイナリエディタでみると確かに変な文字列が。
そもそもその不正な文字コードを根絶することももちろん必要だが、それを読み込ませるときになんとかしてやろうと。
過去にincludeじゃなくてread_fileを使うことで回避したんだけど、これだと読み込むファイルがphpだとうまく評価されない。
それに埋め込んでる箇所がwordpressの管理下なのでいつものパッチ作戦をやるとさらに増えるため、ふやしたくない。
template-loader.php 26% L38

} else if ( is_page() && $template = get_page_template() ) {
include($template);
//readfile($template);

ほんでこの読み込ませるファイルはbomをつけとるとincludeしても(おそらくrequireしても)バグったりしない。
bomつけてfile_put_contentsする関数を作成。

// bomを付けてファイル出力
// 直接実行されるファイルには付けるとバグるらしい
function eFilePutContents($path, $content){
$content = chr(0xef).chr(0xbb).chr(0xbf) . $content;
return file_put_contents($path, $content);
}

参考
http://cl.pocari.org/2006-06-05-1.html

コメントを残す