* [PCRE] ページ名が英数字で間にスペースがあると、autolink でマッチしない [#h13096e7]

-ページ: BugTrack
-投稿者: [[morikawa]]
-優先順位: 低
-状態: 完了
-カテゴリー: 本体バグ
-投稿日: 2003-12-08 (月) 09:29:22
-バージョン: 

#contents

**メッセージ [#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};

- BugTrack2/319 よりコピーしました。&br;ところで、[[cvs:lib/func.php]] (1.94) のChangeLog は「generate_trie_regex(): More readable comments」となっていて、実際にコメントの修正以外は入っていないみたいなんですが・・・  -- 名無しさん &new{2009-03-26 (木) 17:35:23};
-- すみません。履歴を追いかけただけで修正はこれから~、な状態みたいですね。 -- 名無しさん &new{2009-03-26 (木) 22:04:27};

#comment

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Site admin: PukiWiki Development Team

PukiWiki 1.5.4+ © 2001-2022 PukiWiki Development Team. Powered by PHP 8.2.12. HTML convert time: 0.041 sec.

SourceForge