プロジェクト

全般

プロフィール

Bug(バグ) #3289

自動リンク機能で末尾のスラッシュを省略すると後続の日本語テキストもURLとしてリンクされてしまう

Youichi Kimura約11年前に追加. 3年以上前に更新.

ステータス:
Rejected(差し戻し)
優先度:
Normal(通常)
担当者:
対象バージョン:
開始日:
2012-12-27
期日:
進捗率:

50%

3.6 で発生するか:
Unknown (未調査)
3.8 で発生するか:
Unknown (未調査)

説明

現象

op_auto_link_text (source:lib/helper/opUtilHelper.php) を使用する箇所(アクティビティ、日記の本文・コメントなど)で、次のような現象が起こる。

http://example.com/テキスト と入力して投稿すると <a href="http://example.com/">http://example.com/</a>テキスト のように日本語の部分を除いて自動リンク機能が働くが、
http://example.comテキスト と入力して投稿すると <a href="http://example.comテキスト">http://example.comテキスト</a> のようなリンクが生成されてしまう。

原因

op_auto_link_text による自動リンクで使用される正規表現は次のように定義されている。

  define('SF_AUTO_LINK_RE', '~
    (                       # leading text
      <\w+.*?>|             #   leading HTML tag, or
      [^=!:\'"/]|           #   leading punctuation, or
      ^|                    #   beginning of line, or
      \s?                   #   leading whitespaces
    )
    (
      (?:https?://)|        # protocol spec, or
      (?:www\.)             # www.*
    )
    (
      [-\w]+                   # subdomain or domain
      (?:\.[-\w]+)*            # remaining subdomains or domain
      (?::\d+)?                # port
      \/?
      [a-zA-Z0-9_\-\/.,:;\~\?@&=+$%#!()]*
    )
    ([^a-zA-Z0-9_\-\/.,:;\~\?@&=+$%#!()]|\s|<|$)    # trailing text
   ~xu');

この正規表現はUTF-8モードが有効となっており(末尾の u オプションによる)、このモードではpreg_match内部でPCREに対して PCRE_UCF オプションが使用される。このオプションでは \d, \D, \s, \S, \w, \W などの 重要な 文字クラスの挙動が変わり、例えば \d は全角数字にもマッチし、 \w は漢字や平仮名にもマッチするようになる。これによって、ドメイン部分の [-\w]+ に日本語のテキストがマッチしてしまうため前述のような現象が起こる。

参考

修正内容

SF_AUTO_LINK_RE で使用されている \w, \s, \d[0-9A-Za-z], \ , [0-9] にそれぞれ置き換える。


子チケット

Backport(バックポート) #4392: 自動リンク機能で末尾のスラッシュを省略すると後続の日本語テキストもURLとしてリンクされてしまうNew(新規)isao sano

Backport(バックポート) #4393: 自動リンク機能で末尾のスラッシュを省略すると後続の日本語テキストもURLとしてリンクされてしまうNew(新規)isao sano


関連するチケット

コピー先 OpenPNE 3 - Backport(バックポート) #3707: 自動リンク機能で末尾のスラッシュを省略すると後続の日本語テキストもURLとしてリンクされてしまう Rejected(差し戻し) 2012-12-27
コピー先 OpenPNE 3 - Backport(バックポート) #3708: 自動リンク機能で末尾のスラッシュを省略すると後続の日本語テキストもURLとしてリンクされてしまう Rejected(差し戻し) 2012-12-27

関係しているリビジョン

リビジョン 6be8a693 (差分)
Youichi Kimura約11年前に追加

add testcases for op_auto_link_text (refs #3289)

リビジョン faa18559 (差分)
Youichi Kimura約11年前に追加

fix SF_AUTO_LINK_RE matches unexpected characters (fixes #3289)

履歴

#1 Youichi Kimura約11年前に更新

  • 担当者Youichi Kimura にセット

6be8a693fdc59a3d4cc530fd47bfea507a9d6ca8 にてテストケースを追加しました。

#2 Youichi Kimura約11年前に更新

  • 説明 を更新 (diff)

詳しい原因が判明したためチケットの説明を修正しました。

#3 Youichi Kimura約11年前に更新

  • 説明 を更新 (diff)

#4 Youichi Kimura約11年前に更新

  • ステータスNew(新規) から Pending Review(レビュー待ち) に変更
  • 進捗率0 から 50 に変更

更新履歴 faa18559888e21e6ddfbffd155ece828b815e9d6 で適用されました。

#5 Youichi Kimura約11年前に更新

  • 説明 を更新 (diff)

#6 isao sano9年以上前に更新

  • コピー先 Backport(バックポート) #3707: 自動リンク機能で末尾のスラッシュを省略すると後続の日本語テキストもURLとしてリンクされてしまう を追加

#7 isao sano9年以上前に更新

  • コピー先 Backport(バックポート) #3708: 自動リンク機能で末尾のスラッシュを省略すると後続の日本語テキストもURLとしてリンクされてしまう を追加

#8 Shinichi Urabe9年以上前に更新

  • ステータスPending Review(レビュー待ち) から Rejected(差し戻し) に変更

日本語ドメインがリンクされなくなりますが、問題無いでしょうか

#9 isao sanoほぼ7年前に更新

対象バージョン変更のため、修正内容の確認を行います。

#10 isao sanoほぼ7年前に更新

  • 対象バージョンOpenPNE 3.9.0-old から OpenPNE 3.9.0 に変更

#11 kaoru n約4年前に更新

  • 対象バージョンOpenPNE 3.9.0 から OpenPNE 3.10.x に変更

#12 kaoru n3年以上前に更新

  • 対象バージョンOpenPNE 3.10.x から OpenPNE 3.11.x に変更

他の形式にエクスポート: Atom PDF