[PCRE] 特定の文字列がBracketNameでリンクにならない

  • ページ: BugTrack
  • 投稿者: henoheno
  • 優先順位: 重要
  • 状態: 保留
  • カテゴリー: その他
  • 投稿日: 2004-12-12 (日) 10:43:03
  • バージョン:


メッセージ

official:続・質問箱/480より。特定のサイトで、特定の文字の組み合わせがページ名として認識されない。(ブラケットで囲んでもリンクにならない / 新規ページ作成をしようとしてもWikiNameではないと言われる)

今のところPHPのバージョンか、PHPのモジュールに依存すると思われている。PukiWikiでケアできるかは不明。

NG:

  • devサイト(ここ): Debian woody + Apache 1.3.26 + PHP 4.1.2
  • CliffordSakakiさんのMac: MacOSX 10.3.6 + Apache 1.3.33 + PHP 4.3.2 + PukiWiki 1.4.4 -- PHPはパッケージ版?
  • でぃあばぁ: Windows2000 + AN HTTPD + PHP 4.3.2 + PukiWiki 1.4.4

OK:

  • orgサイト: Nature's Linux + Apache 1.3.x + PHP 4.3.9
  • にぶんのに: Linux + Apache + PHP 4.3.4
  • henoheno: FreeBSD 4.10 + Apache 2.0.52_2 + PHP 4.3.9 + PukiWiki (1.4 and 1.4.4)
  • CliffordSakakiさんのMac: MacOSX 10.3.6 + Apache 1.3.33 + PHP 4.3.9 + PukiWiki 1.4.4 -- PHPを 4.3.9 (パッケージ版)にすることで直ったという
  • teanan: Windwos2000 + Microsoft-IIS/5.0 + PHP 4.3.8 + PukiWiki 1.4.4
  • teanan: MacOSX(Darwin Kernel Version 7.6.0) + Apache 1.3.29 + PHP 4.3.4 + PukiWiki 1.4.4
  • でぃあばぁ: Windows2000 + AN HTTPD + PHP 4.3.3 + PukiWiki 1.4.4

以上から言えそうな点

  • Unix like OSの種類には関係がなさそうである
  • Apacheのバージョンや系統には関係がなさそうである (1.3.xでも2.xでもOKの事例がある)
  • PHP のバージョンあるいは内部モジュール、関連ライブラリと関係がありそうである
    • 特に PHP 4.3.3 あたりが境界ではないかという指摘あり
  • PukiWiki のバージョンには関係が無さそうである (1.4でも1.4.4でもOKの事例がある)

報告例

  • アート オブ ウォー?ト オ? ブ ウ?
  • アンリミテッド サガ?ド サ?
  • イースIII ワンダラーズ フロム イース?I ワ? ズ フ? ム イ?
  • エース コンバット 04 シャッタード スカイ?ス コ? ト 0? 4 シ? ド ス?
  • エンパイア アース?ア ア?

問題ない例

  • アーマードコアIII サイレントライン?
  • アール・タイプ ファイナル?
  • R レーシング エヴォリューション?
  • アクア ゾーン?
  • アドバンスド ファンタジアン?

test

  • ア ア?
  • ア カ?
  • ア サ?
  • ア タ?
  • ア ダ?
  • ア チ?
  • ア ヂ?
  • ア ツ?
  • ア ヅ?
  • ア テ?
  • ア デ?
  • ア ト?
  • ア ド?
  • ア ナ?
  • ア ハ?
  • ア マ?
  • ア ヤ?
  • ア ラ?
  • ア ワ?

test2

a 亜?a%20%B0%A1
a 葦?a%20%B0%B1
a 芦?a%20%B0%B2
a 鯵?a%20%B0%B3
a 梓?a%20%B0%B4
a 圧?a%20%B0%B5
a 斡?a%20%B0%B6
a 扱?a%20%B0%B7
a 宛?a%20%B0%B8
a 姐?a%20%B0%B9
a 虻?a%20%B0%BA
a 飴?a%20%B0%BB
a 絢?a%20%B0%BC
a 綾?a%20%B0%BD
a 鮎?a%20%B0%BE
a 或?a%20%B0%BF
a 粟?a%20%B0%C0
a 袷?a%20%B0%C1
a 安?a%20%B0%C2
a 庵?a%20%B0%C3
a 按?a%20%B0%C4
a 暗?a%20%B0%C5

test3

bracketeuc
a タ?a%20%A5%BF
a ダ?a%20%A5%C0
a Э?a%20%A7%BF
a Ю?a%20%A7%C0
a ┸?a%20%A8%BF
a ╂?a%20%A8%C0
a 或?a%20%B0%BF
a 粟?a%20%B0%C0
a 運?a%20%B1%BF
a 雲?a%20%B1%C0

test4

a ァ?
a ア?
a ィ?
a イ?
a ゥ?
a ウ?
a ェ?
a エ?
a ォ?
a オ?
a カ?
a ガ?
a キ?
a ギ?
a ク?
a グ?
a ケ?
a ゲ?
a コ?
a ゴ?
a サ?
a ザ?
a シ?
a ジ?
a ス?
a ズ?
a セ?
a ゼ?
a ソ?
a ゾ?
a タ?
a ダ?
a チ?
a ヂ?
a ッ?
a ツ?
a ヅ?
a テ?
a デ?
a ト?
a ド?
a ナ?
a ニ?
a ヌ?
a ネ?
a ノ?
a ハ?
a バ?
a パ?
a ヒ?
a ビ?
a ピ?
a フ?
a ブ?
a プ?
a ヘ?
a ベ?
a ペ?
a ホ?
a ボ?
a ポ?
a マ?
a ミ?
a ム?
a メ?
a モ?
a ャ?
a ヤ?
a ュ?
a ユ?
a ョ?
a ヨ?
a ラ?
a リ?
a ル?
a レ?
a ロ?
a ヮ?
a ワ?
a ヰ?
a ヱ?
a ヲ?
a ン?
a ヴ?
a ヵ?
a ヶ?

コメント

  • 難しいことは良く分からないのですが、気になったので以下のようにテストしてみました。環境はWindows2000 + AN HTTPD + PHP にしてみました。 -- でぃあばぁ 2004-12-12 (日) 13:46:16
    • テストプログラム (EUC-JP)
      <?php
      $a = array('o タ', 'o ダ');
      foreach ($a as $s) {
        echo preg_replace('/.+(?<!\s)$/', 'X' , $s).'<br>';
      }
      ?>
      • PHP4.3.2での出力
        o タ
        X
      • PHP4.3.3での出力
        X
        X
  • 可能であれば、phpが使用しているPCRE(Perl Compatible Regular Expressions)のバージョンを調査してみてください。
    <?php phpinfo(); ?>
    PHP Version 4.1.2
    PCRE Library Version 3.4 22-Aug-2000
    PHP Version 4.3.2
    PCRE Library Version 3.92 11-Sep-2002
    PHP Version 4.3.3
    PCRE Library Version 4.3 21-May-2003
    PHP Version 4.3.4
    PCRE Library Version 4.3 21-May-2003
    PHP Version 4.3.8
    PCRE Library Version 4.5 01-December-2003
    PHP Version 5.0.2
    PCRE Library Version 4.5 01-December-2003
  • 上でOKとなっているPHP4.3.4環境は PCRE Library Version 4.3 21-May-2003 を使っていました -- にぶんのに 2004-12-12 (日) 16:40:21
  • Win環境では問題なさそうです。 -- teanan 2004-12-12 (日) 18:35:55
  • うちのサイトのMacも追加しました。PHP4.3.4で同じくPCRE 4.3のようです。特に問題ないです。 -- teanan 2004-12-12 (日) 18:49:10
  • PCREのテストツール、pcretestでテストしてみました。環境はRedHatLinux9(LANG="ja_JP.eucJP"、データファイルもEUC-JP)。4.3のChangeLogの6,7辺りが怪しいかなあと思います。 -- でぃあばぁ 2004-12-13 (月) 16:46:11
    • ./configure としてコンパイルしたもの
      • PCRE version 4.2 14-Apr-2003
        /.+(?<!\s)$/
        o タ
         0: o \xa5\xbf
        o ダ
         0: o \xa5\xc0
      • PCRE version 4.3 21-May-2003
        /.+(?<!\s)$/
        o タ
         0: o \xa5\xbf
        o ダ
         0: o \xa5\xc0
    • ./configure --enable-utf8 としてコンパイルしたもの
      • PCRE version 4.2 14-Apr-2003
        /.+(?<!\s)$/
        o タ
        No match
        o ダ
         0: o \xa5\xc0
        data>
      • PCRE version 4.3 21-May-2003
        /.+(?<!\s)$/
        o タ
         0: o \xa5\xbf
        o ダ
         0: o \xa5\xc0
  • お疲れ様です。結局PCREの問題っぽいということでしょうか :) -- henoheno 2004-12-13 (月) 22:34:35
  • \040は\sと等価な様なので、PCRE4.3のChangeLogの7に該当するように思えます。 -- でぃあばぁ 2004-12-13 (月) 23:58:38
    A lookbehind in a pattern matched in non-UTF-8 mode on a PCRE compiled with
    UTF-8 support could misbehave in various ways if the subject string
    contained bytes with the 0x80 bit set and the 0x40 bit unset in a lookbehind
    area. (PCRE was not checking for the UTF-8 mode flag, and trying to move
    back over UTF-8 characters.)
  • lookbehindの問題らしいので、短絡的ですが暫定的には以下のようにすることでリンクされるようになりますね。ただ、スペースを末尾に含むページを作れてしまう、[[foo #bar]]のように書いてもリンクされてしまうなど問題も多いです。セキュリティの問題もありますし、可能であれば最新のPHPに上げた方が良さそうです (^^; -- でぃあばぁ 2004-12-23 (木) 11:04:47
    $BracketName = '(?!\s):?[^\r\n\t\f\[\]<>#&":]+:?';


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2005-03-19 (土) 10:02:39
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.790 sec.

OSDN