携帯電話のNetFrontからアクセスすると、長いページが自動分割されます。このとき、条件によっては不適切な場所で分割され、場合によっては文字化けが発生することもあります。
<?php $c0 = curl_init("http://aksum.jp/pukiwiki/?cmd=read&page=FrontPage&p=2") or die("curl_init failed."); curl_setopt($c0, CURLOPT_RETURNTRANSFER, TRUE) or die("curl_setopt(RETURNTRANSFER) failed."); curl_setopt($c0, CURLOPT_HTTPHEADER, array("User-Agent: NetFront/0.0")) or die("curl_setopt(HTTPHEADER) failed."); print curl_exec($c0); curl_close($c0); ?>
PHP+Curlがインストールされている環境にこのphpファイルを置いて、ブラウザで開いてください。以下のように、タグの途中で切られた出力が得られます。
0.Top | 1.New | 2.Edit | 3.Freeze | 4.Menu | 5.Recent | 7.Prev | 3/4 | 8.Next mathfunc.inc.php" title="自作プラグイン/mathfunc.inc.php (1d)" rel="nofollow">自作プラグイン/mathfunc.inc.php Last-Modified:1970/01/01 18:00:00
なお、ページが変更されれば再現状況も変化します。公式サイトのpukiwikiでは簡単には再現しなかったので、Googleで見つけた適当なサイトを上記に書いています(筆者の所有サイトではありません)。公式サイトで再現できた方は、上記のリンクの書き換えをお願いします。
// Get one page $body = substr($body, $pageno * $max_size, $max_size);
if ($pageno < 0 || $pagecount - 1 < $pageno) $pageno = 0; // Get one page $body = substr($body, $pageno * $max_size, $max_size);こうしておけばページの分割数が変化した時に、古いデータを基にしたリンクから飛んでくると何も表示されないというのを回避できます。 -- 2009-10-24 (土) 02:52:51
// Too large contents to edit if ($edit && $pagecount > 1) die('Unable to edit: Too large contents for your device');しかし、リンク生成部分が閲覧固定になっています。
// Previous / Next block if ($pagecount > 1) { $prev = $pageno - 1; $next = $pageno + 1; if ($pageno > 0) { $navi[] = '<a href="' . $script . '?cmd=read&page=' . $r_page . '&p=' . $prev . '" ' . $accesskey . '="7">7.Prev</a>'; } $navi[] = $next . '/' . $pagecount . ' '; if ($pageno < $pagecount - 1) { $navi[] = '<a href="' . $script . '?cmd=read&page=' . $r_page . '&p=' . $next . '" ' . $accesskey . '="8">8.Next</a>'; } }たとえば検索結果が複数ページになった場合、$vars['cmd'] がsearch なので$vars['page'] は空文字となり*1 、'?cmd=read&page=&p=1' という*2 不正なURL が作られてしまいます。 -- 2009-10-24 (土) 18:56:35