Project

General

Profile

Actions

Backport(バックポート) #3708

open

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

Added by isao sano about 10 years ago. Updated about 10 years ago.

Status:
Rejected(差し戻し)
Priority:
Normal(通常)
Assignee:
Target version:
Start date:
2012-12-27
Due date:
% Done:

50%

Estimated time:

Description

現象

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] にそれぞれ置き換える。


Related issues 1 (1 open0 closed)

Copied from OpenPNE 3 - Bug(バグ) #3289: 自動リンク機能で末尾のスラッシュを省略すると後続の日本語テキストもURLとしてリンクされてしまうRejected(差し戻し)Youichi Kimura2012-12-27

Actions
Actions #1

Updated by isao sano about 10 years ago

  • Copied from Bug(バグ) #3289: 自動リンク機能で末尾のスラッシュを省略すると後続の日本語テキストもURLとしてリンクされてしまう added
Actions #2

Updated by isao sano about 10 years ago

  • Status changed from Pending Review(レビュー待ち) to New(新規)
  • Assignee deleted (Youichi Kimura)
  • % Done changed from 50 to 0
Actions #3

Updated by isao sano about 10 years ago

  • Status changed from New(新規) to Accepted(着手)
Actions #4

Updated by isao sano about 10 years ago

  • Status changed from Accepted(着手) to Pending Review(レビュー待ち)
  • % Done changed from 0 to 50

https://github.com/openpne/OpenPNE3/pull/210
にてプルリクエストしました

Actions #5

Updated by Shinichi Urabe about 10 years ago

  • Status changed from Pending Review(レビュー待ち) to Rejected(差し戻し)

https://redmine.openpne.jp/issues/3289#note-8 の理由により差し戻し

Actions #6

Updated by isao sano about 10 years ago

  • Assignee set to isao sano
Actions #7

Updated by isao sano about 10 years ago

  • Target version changed from OpenPNE 3.8.14 to OpenPNE 3.8.x

リリースまでに修正されない可能性が高いため、対象バージョンから一旦外します。

Actions

Also available in: Atom PDF