cvs:lib/func.php [r1.104] で導入された htmlsc() のデフォルトフラッグが ENT_QUOTES なので、cvs先端で「strong」のような強調構文が無効化されてようになっているようです。
diff -u -b -r1.104 func.php --- lib/func.php 25 Jan 2011 15:01:01 -0000 1.104 +++ lib/func.php 30 Jan 2011 16:36:35 -0000 @@ -855,7 +855,7 @@ } // Sugar with default settings -function htmlsc($string = '', $flags = ENT_QUOTES, $charset = CONTENT_CHARSET) +function htmlsc($string = '', $flags = ENT_COMPAT, $charset = CONTENT_CHARSET) { return htmlspecialchars($string, $flags, $charset); // htmlsc() }
ひょっとすると $line_rules のほうを修正すべきかもしれませんが、、、とりあえず報告しておきます。 どうぞよろしくお願いします。
diff -u -r1.38 make_link.php --- make_link.php 25 Jan 2011 15:01:01 -0000 1.38 +++ make_link.php 31 Jan 2011 14:12:28 -0000 @@ -97,7 +97,7 @@ $string = preg_replace_callback('/' . $this->pattern . '/x', array(& $this, 'replace'), $string); - $arr = explode("\x08", make_line_rules(htmlsc($string))); + $arr = explode("\x08", make_line_rules(htmlsc($string, ENT_COMPAT))); $retval = ''; while (! empty($arr)) { $retval .= array_shift($arr) . array_shift($this->result);
diff -u -r1.25 default.ini.php --- default.ini.php 20 Dec 2005 14:04:40 -0000 1.25 +++ default.ini.php 31 Jan 2011 14:42:54 -0000 @@ -115,8 +115,8 @@ 'SIZE\(([^\(\)]*)\):((?:(?!SIZE\([^\)]+\)\:).)*)' => '<span class="size$1">$2</span>', '%%%(?!%)((?:(?!%%%).)*)%%%' => '<ins>$1</ins>', '%%(?!%)((?:(?!%%).)*)%%' => '<del>$1</del>', - "'''(?!')((?:(?!''').)*)'''" => '<em>$1</em>', - "''(?!')((?:(?!'').)*)''" => '<strong>$1</strong>', + "'''(?!')((?:(?!''').)*)'''" => '<em>$1</em>', + "''(?!')((?:(?!'').)*)''" => '<strong>$1</strong>', );
// 拡張パラメータをチェック if (! empty($params['_args'])) { $_title = array(); foreach ($params['_args'] as $arg) { if (preg_match('/^([0-9]+)x([0-9]+)$/', $arg, $matches)) { $params['_size'] = TRUE; $params['_w'] = $matches[1]; $params['_h'] = $matches[2]; } else if (preg_match('/^([0-9.]+)%$/', $arg, $matches) && $matches[1] > 0) { $params['_%'] = $matches[1]; } else { $_title[] = $arg; } } if (! empty($_title)) { $title = htmlsc(join(',', $_title)); if ($is_image) $title = make_line_rules($title); } }で使われています。 -- 2011-01-31 (月) 20:00:26コメント主 2011-02-01 (火) 04:19:30
ただ今になってもう1つ気がついたのですが、cvs:plugin/ref.inc.php(r1.23)のときの
$title = join(',', $_title); $title = $is_image ? htmlspecialchars($title) : make_line_rules(htmlspecialchars($title));
とは逆の条件で今はmake_line_rulesを実行しているので、
#ref(http://pukiwiki.sourceforge.jp/dev/image/top.png,''test'')
画像のときに
<img src="http://pukiwiki.sourceforge.jp/dev/image/top.png" alt="<strong>test</strong>" title="<strong>test</strong>" />
とaltの中などに<strong>が出力されて、noimg指定するか画像以外のときに
#ref(http://pukiwiki.sourceforge.jp/dev/image/top.png,noimg,''test'')
#ref(): File not found: "top.png" at page "http://pukiwiki.sourceforge.jp/dev/image"
となにも変化がない状態になるんですが -- 2011-01-31 (月) 20:00:26コメント主 2011-02-01 (火) 04:19:30
今まではENT_QUOTES フラグでなかったので表面化しなかっただけみたいですが、'test'のようにシングルクオートがページ名に含まれているとhtmlsc() でエスケープされて
[['test']]
とRecentChanges のwikiソースに出力にされてしまい、[['test']]のようになってリンクになりません。 要修正箇所はcvs:lib/make_link.php のlastmodified_add() とput_lastmodified() -- 2011-11-26 (土) 15:20:45
http://192.168.0.4/(some where)/pukiwiki/pukiwiki.php?%A5%E9%A5%F3%A5%AD%A5%F3%A5%B0ちょっと困りました. -- よっちい 2011-11-19 (土) 23:54:16
#!/bin/sh for i do /bin/cat $i | /usr/bin/sed -e 's/htmlspecialchars/htmlsc/g' > $i.temp /bin/mv $i.temp $i doneとしてlib/func.phpにhtmlsc()の実装を持ってきてみたりしました.これでphp-5.4.0RC1にパッチを当てずに表示は正しく出てくるようになったっぽいですが,うーん「たどれないリンクがある」は改善されないですね.... $flagsをphpのデフォルトにすれば良いのかな.... -- よっちい 2011-11-20 (日) 23:23:59