[PCRE] AutoLinkは日本語対応でない?

  • ページ: BugTrack
  • 投稿者: みこ
  • 優先順位: 低
  • 状態: 保留
  • カテゴリー: 本体バグ
  • 投稿日: 2004-12-15 (水) 00:29:39
  • バージョン: cvs(12/14)

メッセージ

(EUCページが前提ですが)pukiwiki.ini.php の $autolink=2 として「毒」というページを作成し、別のページで「再配布の条件」と入れるとリンクが化けます。もしかしてと思い、ちょっと文字コードを追ってみると

  • 再配布(EUC)
    BA-C6-C7-DB-C9-DB
  • 毒(EUC)
    C6-C7

ということは、マルチバイト処理をしていない=偶然にもページ名が一致してしまった場合には化けるということになります。*1

サンプル: http://cafelounge.net/test/cvs/?%A5%C6%A5%B9%A5%C8 (現在では削除されています)


  • BugTrack/604などautolinkが小さいと不都合が多い(=ある程度仕様な)のは知っていますが、偶然が重なる場合もあるのであえてページを起こしました。(対策としては漢字を使用するのはページ名とInterWiki名だけだと思うので・・・) -- みこ 2004-12-15 (水) 01:01:05
  • どうも*2 今までの様子を見ていると、バイト単位でぶった切る様ですね。現状の実装においては仕様なのでしょう。実際にこの処理をしている部分をここに挙げていけばいいかもしれないですね。 -- henoheno 2004-12-16 (木) 23:23:04
  • おそらく、preg_xxxx (Perl互換系の関数) を使っていることが原因のようですね。ただ、autolink(というかインライン変換系)が使用している preg_replace_callback はマルチバイト版の代用できる関数が無いのが困り物です。(わたしもGoogleなどで眺めていましたが代用できるものがない... XD ) -- みこ 2004-12-17 (金) 00:32:45
  • get_search_wordsに入ってるコードを流用したら何かまずいのでしょうか -- Cue 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のために結構使いづらいですね。
    関連:pukiwiki:続・質問箱/325 -- ぃぉぃぉ 2008-03-12 (水) 03:10:10
    • とりあえず、このcallbackから呼び出された先でチェックをする方法で改善する方法を実装してみました。autolinkされるべきでない単語のみの行では、文字化けを避けられます。案3 -- ぃぉぃぉ 2008-03-12 (水) 03:12:32
    • 対策後のデモ。こちら -- ぃぉぃぉ 2008-03-12 (水) 03:15:46


*1 UTF-8版の場合はこの現象は発生しないかもしれません(12-15現在未確認)
*2 まだ中身を見たことがない

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-03-12 (水) 03:15:47
Site admin: PukiWiki Development Team

PukiWiki 1.5.2+ © 2001-2019 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u7. HTML convert time: 0.228 sec.

OSDN