http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/pukiwiki/pukiwiki/lib/func.php.diff?r1=1.26&r2=1.27 以降、decodeが期待の動作をしない場合がある?ようです。
簡単な再現例として、1.4.5_1におけるPHPの「ページ名の変更」を 挙げておきます。
「以下のファイルをリネームします。」の所で、
のように表示されるべきところが、
となります。
取り敢えず、decodeをlib/func.php 1.26版に戻すか、
return preg_match('/^[0-9a-f]+$/i', $key) ? pack('H*', "$key") : $key;
とすることで回避出来ます。
return preg_match('/^[0-9a-f]+$/i', $key) ? substr(pack('H*', '20202020' . $key), 4) : $key;
foreach ($pages as $old=>$new) $ret['body'] .= '<li>' . make_pagelink(decode($old)) .配列の仕様によると
あるキーが、整数の標準的な表現形式である場合、 そのように解釈されます。(つまり、"8"は 8として解釈されます。一方、 "08"は"08"として解釈されます。)
return preg_match('/^(?:[0-9a-f]{2})+$/i', $key) ? pack('H*', (string)$key) : $key;
<?php $key = strtoupper(bin2hex('PHP')); var_dump($key); // string(6) "504850" $pack = pack('H*', $key); var_dump($pack); // string(3) "PHP" $arr = array($key => 'piyo'); var_dump($arr); // array(1) { // [504850]=> <- ! // string(4) "piyo" // } foreach ($arr as $_key => $_value) { var_dump($_key); // int(504850) <- !! } $pack = pack('H*', $_key); var_dump($pack); // string(0) <- !!! $__key = (string)$_key; var_dump($__key); // string(6) "504850" $pack = pack('H*', (string)$_key); var_dump($pack); // string(3) "PHP" ?>