Backport(バックポート) #3707
open自動リンク機能で末尾のスラッシュを省略すると後続の日本語テキストもURLとしてリンクされてしまう
50%
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]+
に日本語のテキストがマッチしてしまうため前述のような現象が起こる。
参考¶
- PHP :: Bug #52971 :: PCRE-Meta-Characters not working with utf-8
- php-src/ext/pcre/php_pcre.c at master · php/php-src · GitHub
修正内容¶
SF_AUTO_LINK_RE で使用されている \w
, \s
, \d
を [0-9A-Za-z]
, \
, [0-9]
にそれぞれ置き換える。
Updated by isao sano about 10 years ago
- Copied from Bug(バグ) #3289: 自動リンク機能で末尾のスラッシュを省略すると後続の日本語テキストもURLとしてリンクされてしまう added
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
Updated by isao sano about 10 years ago
- Status changed from New(新規) to Accepted(着手)
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/201
にてプルリクエストを行いました
Updated by Shinichi Urabe about 10 years ago
- Status changed from Pending Review(レビュー待ち) to Rejected(差し戻し)
Updated by isao sano about 10 years ago
- Target version changed from OpenPNE 3.6.17 to OpenPNE 3.6.x
リリースまでに修正されない可能性が高いため、対象バージョンから一旦外します。