BugTrack/766
の編集
Top
/
BugTrack
/
766
[
トップ
] [
編集
|
差分
|
履歴
|
添付
|
リロード
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
*[PCRE] AutoLinkは日本語対応でない? [#v9d2eaec] -ページ: BugTrack -投稿者: [[みこ]] -優先順位: 低 -状態: 保留 -カテゴリー: 本体バグ -投稿日: 2004-12-15 (水) 00:29:39 -バージョン: cvs(12/14) **メッセージ [#n610d8c7] (EUCページが前提ですが)pukiwiki.ini.php の $autolink=2 として「毒」というページを作成し、別のページで「再配布の条件」と入れるとリンクが化けます。もしかしてと思い、ちょっと文字コードを追ってみると -再配布(EUC)~ BA-''C6-C7''-DB-C9-DB -毒(EUC)~ ''C6-C7'' ということは、マルチバイト処理をしていない=偶然にもページ名が一致してしまった場合には化けるということになります。((UTF-8版の場合はこの現象は発生しないかもしれません(12-15現在未確認))) サンプル: %%http://cafelounge.net/test/cvs/?%A5%C6%A5%B9%A5%C8 %% (現在では削除されています) ---- -[[BugTrack/604]]などautolinkが小さいと不都合が多い(=ある程度仕様な)のは知っていますが、偶然が重なる場合もあるのであえてページを起こしました。(対策としては漢字を使用するのはページ名とInterWiki名だけだと思うので・・・) -- [[みこ]] &new{2004-12-15 (水) 01:01:05}; -どうも((まだ中身を見たことがない)) 今までの様子を見ていると、バイト単位でぶった切る様ですね。現状の実装においては仕様なのでしょう。実際にこの処理をしている部分をここに挙げていけばいいかもしれないですね。 -- [[henoheno]] &new{2004-12-16 (木) 23:23:04}; -おそらく、preg_xxxx (Perl互換系の関数) を使っていることが原因のようですね。ただ、autolink(というかインライン変換系)が使用している preg_replace_callback はマルチバイト版の代用できる関数が無いのが困り物です。(わたしもGoogleなどで眺めていましたが代用できるものがない... XD ) -- [[みこ]] &new{2004-12-17 (金) 00:32:45}; - get_search_wordsに入ってるコードを流用したら何かまずいのでしょうか -- [[Cue]] &new{2006-04-07 (金) 21:59:18}; --- func.php Mon Jul 04 00:09:28 2005 +++ func.new.php Fri Apr 07 21:49:54 2006 @@ -507,6 +507,14 @@ $result = get_autolink_pattern_sub($auto_pages, 0, count($auto_pages), 0); $result_a = get_autolink_pattern_sub($auto_pages_a, 0, count($auto_pages_a), 0); + + if (SOURCE_ENCODING == 'EUC-JP' && $result != '(?!)') { + // Perl memo - Correct pattern-matching with EUC-JP + // http://www.din.or.jp/~ohzaki/perl.htm#JP_Match (Japanese) + $result = '(?<!\x8F)' . $result . + '(?=(?:[\xA1-\xFE][\xA1-\xFE])*' . // JIS X 0208 + '(?:[\x00-\x7F\x8E\x8F]|\z))'; // ASCII, SS2, SS3, or the last + } } return array($result, $result_a, $forceignorepages); } - autolinkはpreg_replace_callbackのために結構使いづらいですね。&br;関連:[[pukiwiki:続・質問箱/325]] -- [[ぃぉぃぉ]] &new{2008-03-12 (水) 03:10:10}; -- とりあえず、このcallbackから呼び出された先でチェックをする方法で改善する方法を実装してみました。autolinkされるべきでない単語のみの行では、文字化けを避けられます。[[案3>http://pukiowikio.sourceforge.jp/index.php?Develop%2FModification1%2F12#a36959cf]] -- [[ぃぉぃぉ]] &new{2008-03-12 (水) 03:12:32}; -- 対策後のデモ。[[こちら>http://pukiowikio.sourceforge.jp/index.php?%CF%A4%B9%A1]] -- [[ぃぉぃぉ]] &new{2008-03-12 (水) 03:15:46}; #comment
タイムスタンプを変更しない
*[PCRE] AutoLinkは日本語対応でない? [#v9d2eaec] -ページ: BugTrack -投稿者: [[みこ]] -優先順位: 低 -状態: 保留 -カテゴリー: 本体バグ -投稿日: 2004-12-15 (水) 00:29:39 -バージョン: cvs(12/14) **メッセージ [#n610d8c7] (EUCページが前提ですが)pukiwiki.ini.php の $autolink=2 として「毒」というページを作成し、別のページで「再配布の条件」と入れるとリンクが化けます。もしかしてと思い、ちょっと文字コードを追ってみると -再配布(EUC)~ BA-''C6-C7''-DB-C9-DB -毒(EUC)~ ''C6-C7'' ということは、マルチバイト処理をしていない=偶然にもページ名が一致してしまった場合には化けるということになります。((UTF-8版の場合はこの現象は発生しないかもしれません(12-15現在未確認))) サンプル: %%http://cafelounge.net/test/cvs/?%A5%C6%A5%B9%A5%C8 %% (現在では削除されています) ---- -[[BugTrack/604]]などautolinkが小さいと不都合が多い(=ある程度仕様な)のは知っていますが、偶然が重なる場合もあるのであえてページを起こしました。(対策としては漢字を使用するのはページ名とInterWiki名だけだと思うので・・・) -- [[みこ]] &new{2004-12-15 (水) 01:01:05}; -どうも((まだ中身を見たことがない)) 今までの様子を見ていると、バイト単位でぶった切る様ですね。現状の実装においては仕様なのでしょう。実際にこの処理をしている部分をここに挙げていけばいいかもしれないですね。 -- [[henoheno]] &new{2004-12-16 (木) 23:23:04}; -おそらく、preg_xxxx (Perl互換系の関数) を使っていることが原因のようですね。ただ、autolink(というかインライン変換系)が使用している preg_replace_callback はマルチバイト版の代用できる関数が無いのが困り物です。(わたしもGoogleなどで眺めていましたが代用できるものがない... XD ) -- [[みこ]] &new{2004-12-17 (金) 00:32:45}; - get_search_wordsに入ってるコードを流用したら何かまずいのでしょうか -- [[Cue]] &new{2006-04-07 (金) 21:59:18}; --- func.php Mon Jul 04 00:09:28 2005 +++ func.new.php Fri Apr 07 21:49:54 2006 @@ -507,6 +507,14 @@ $result = get_autolink_pattern_sub($auto_pages, 0, count($auto_pages), 0); $result_a = get_autolink_pattern_sub($auto_pages_a, 0, count($auto_pages_a), 0); + + if (SOURCE_ENCODING == 'EUC-JP' && $result != '(?!)') { + // Perl memo - Correct pattern-matching with EUC-JP + // http://www.din.or.jp/~ohzaki/perl.htm#JP_Match (Japanese) + $result = '(?<!\x8F)' . $result . + '(?=(?:[\xA1-\xFE][\xA1-\xFE])*' . // JIS X 0208 + '(?:[\x00-\x7F\x8E\x8F]|\z))'; // ASCII, SS2, SS3, or the last + } } return array($result, $result_a, $forceignorepages); } - autolinkはpreg_replace_callbackのために結構使いづらいですね。&br;関連:[[pukiwiki:続・質問箱/325]] -- [[ぃぉぃぉ]] &new{2008-03-12 (水) 03:10:10}; -- とりあえず、このcallbackから呼び出された先でチェックをする方法で改善する方法を実装してみました。autolinkされるべきでない単語のみの行では、文字化けを避けられます。[[案3>http://pukiowikio.sourceforge.jp/index.php?Develop%2FModification1%2F12#a36959cf]] -- [[ぃぉぃぉ]] &new{2008-03-12 (水) 03:12:32}; -- 対策後のデモ。[[こちら>http://pukiowikio.sourceforge.jp/index.php?%CF%A4%B9%A1]] -- [[ぃぉぃぉ]] &new{2008-03-12 (水) 03:15:46}; #comment
テキスト整形のルールを表示する