* [PCRE] ページ名が英数字で間にスペースがあると、autolink でマッチしない [#h13096e7] -ページ: BugTrack -投稿者: [[morikawa]] -優先順位: 低 -状態: 完了 -カテゴリー: 本体バグ -投稿日: 2003-12-08 (月) 09:29:22 -バージョン: **メッセージ [#hb97b30d] autolink.dat のスペースをエスケープしたらOKそうでした。 autolink.dat ...|InterWikiテクニカル|Wen Jiabao|ヘルプ|整形ルール|日本語) ...|InterWikiテクニカル|Wen\ Jiabao|ヘルプ|整形ルール|日本語) ---- -PCRE_EXTENDED(エスケープするか 文字クラスの内部にある場合を除き、 パターンの空白文字は完全に無視する)を指定しているので、空白もエスケープする必要がありました。preg_quoteには追加のエスケープ文字がひとつしか指定できないので、str_replace(' ','\\ ',...)を通すようにしました。 -- [[ぱんだ]] &new{2003-12-10 (水) 09:42:34}; -cvsに投入しました。[[cvs:func.php]](v1.4:r1.57) func.phpを差し替えた後、適当なページを更新してautolink.datを再構築してください。 -- [[ぱんだ]] &new{2003-12-10 (水) 09:42:34}; --[[v1.4:r1.57]]で、とりあえずページ名が英数字で間にスペースがある場合に関してはOKそうです。 -- [[morikawa]] &new{2003-12-11 (木) 11:30:26}; -v1.4:r1.57導入すると''「ほげ」''とか''ほげ・げほ''とかがAutoLinkかからないような感じですがCVS難民なだけでしょうか。ダウングレードで元に戻りました。 -- [[たらこせる]] &new{2003-12-10 (水) 11:11:35}; -たらこせるさんと同じく、v1.4:r1.57導入で一部のページがAutoLinkに掛からなくなりました。1.56に戻すと直ります。どのページ名がAutoLinkに掛からないかを挙げれば解決に役立つでしょうか? -- [[司書]] &new{2003-12-14 (日) 01:59:11}; -v1.4:r1.57での変更点(557行目)にtypoがあります。そのせいで生成する正規表現が文字化けしてAutoLinkがおかしくなります。 -- [[ようか]] &new{2004-01-30 (金) 23:48:11}; -$result .= str_replace(' ','\\ ',preg_quote(substr($pages[$i],$pos),'/')); +$result .= str_replace(' ','\\ ',preg_quote(mb_substr($pages[$i],$pos),'/')); --[[BugTrack/514]]もこれで直りました。 -- [[reimy]] &new{2004-01-31 (土) 21:51:43}; -cvsに投入しました。[[cvs:func.php]](v1.4:r1.58) -- [[ぱんだ]] &new{2004-02-29 (日) 23:11:57}; - BugTrack2/319 ([[下>#jeddb01c]]に移動) //#comment ---- ** AutoAlias 利用時に、generate_trie_regex 関数が返す正規表現が、うまく動作しない場合がある [#jeddb01c] AutoAlias 導入前は、ページ名に''#'' が使えないこともあって、generate_trie_regex 関数が''#'' をエスケープしていなくても問題がありませんでした。 しかし、[[#01>test/01]] のように((例なので、短めのルールを書いています)) 別名に''#'' を含むAutoAlias 設定をすると、AutoAlias の正規表現にエスケープされていない''#'' が現れ、&br;InlineConverter クラスで使用する際にパターン修飾子x (PCRE_EXTENDED) によって''#'' 以降がコメント扱いされて正規表現に不整合が発生し、エラーとなります。 generate_trie_regex 関数を if ($index < ($i - 1)) { // Some more keys found // Recurse $regex .= str_replace(array(' ','#'), array('\\ ','\\#'), preg_quote($char, '/')) . generate_trie_regex($array, $index, $i, $pos + 1); } else { // Not found $regex .= str_replace(array(' ','#'), array('\\ ','\\#'), preg_quote(mb_substr($array[$index], $pos), '/')); } として''#'' もエスケープするようにすると、正常に表示されるようになりました。 -- 名無しさん &new{2009-03-20 (金) 00:21:26}; -------- - 把握しました。CVSリポジトリも追いました。こちらは [[BugTrack/502]] の続きのようですので、そこに集約しましょう((いつ誰がやってもいいですが、自分は今日はここまで))。zzz -- [[henoheno]] &new{2009-03-25 (水) 23:57:13}; - コピーしました。&br;ところで、[[cvs:lib/func.php]] (1.94) のChangeLog は「generate_trie_regex(): More readable comments」となっていて、実際にコメントの修正以外は入っていないみたいなんですが・・・ -- 名無しさん &new{2009-03-26 (木) 17:35:23}; #comment