p2(rep2)は、Webサーバーにインストールして使うことを想定した2chビューアーです。私はずっと派生版「p2機能拡張パック」を使っていたのですが、2008年9月以降更新された気配がなく今後のサポートが不安になっていました(PHPなので自分で直すことも出来ますし、実際結構手を入れてるのですが)。
それで、純正のrep2最新版(v1.8.42)もぼちぼち評価しておこうと思いサーバーにインストールしたのですが、iPhoneから見たときの挙動が何かおかしい。
a) 最初のページがやたら小さく(iPhoneの画面サイズに最適化されず)表示される。
b) 板名が文字化けする(「携帯・PHS」が化けました)
というわけで、自分でちょくちょく直してみました。
a)については、iPhoneに画面サイズを最適化するためのviewportの設定が、なぜかindex.phpに対してだけは行われないようになっていたので、lib/P2View内のprintHeadMetasHtmlメソッドで
if (!(basename($_SERVER[‘SCRIPT_NAME’]) == ‘index.php’)) {
を
if (true || !(basename($_SERVER[‘SCRIPT_NAME’]) == ‘index.php’)) {
と書き換えました(要するにこのif自体を無効にしました)。わざわざこんなコードを書くからには、index.phpにviewportを出力しない理由があったのだと思いますが、とりあえずこの修正でうちの環境ではうまく動くようになったのでその辺は深く考えずに。仕事じゃないし。
b)については、散々コードを読み漁った結果、iphone/ShowBrdMenuk.phpのprintItaメソッド、printItaSearchメソッド内でクエリ変数$itaj_enが正しくURLエンコードされていないために起こることを突き止めました。
修正は
echo “…itaj_en={$mita->itaj_en}…";
を
$itaj_en_encoded = rawurlencode($mita->itaj_en);
echo "…itaj_en={$itaj_en_encoded}…";
のような感じで、URLエンコードした変数に差し替えてやります。
なお本故障は、$itaj_en(BASE64エンコードされた板名)に「+」を含む場合に表面化するようです。
これだけ修正を入れることで、うちの環境(Ubuntu9.04 on VMware ESXi 3.5)ではrep2のiPhone用画面がうまく動くようになりました。参考までに。