サポート » バグ報告と提案 » WordPress コメント欄の URL 変換がおかしい気がします

  • wp-includes/formatting.php に含まれる make_clickable() 関数の正規表現がおかしい気がします。
    現状ですと、マルチバイト文字もURLとして認識されてしまっています。

    具体的には1390行目の

    $retval = preg_replace_callback('#(?<!=[\'"])(?<=[*\')+.,;:!&$\s>])(\()?([\w]+?://(?:[\w\\x80-\\xff\#%~/?@\[\]-]{1,2000}|[\'*(+.,;:!=&$](?![\b\)]|(\))?([\s]|$))|(?(1)\)(?![\s<.,;:]|$)|\)))+)#is', '_make_url_clickable_cb', $ret);

    ですが、正しくは

    $retval = preg_replace_callback('#(?<!=[\'"])(?<=[*\')+.,;:!&$\s>])(\()?([\w]+?://(?:[\w\-\.!~*\'\(\);\/?:\@&=+\$,%\#]{1,2000}|[\'*(+.,;:!=&$](?![\b\)]|(\))?([\s]|$))|(?(1)\)(?![\s<.,;:]|$)|\)))+)#is', '_make_url_clickable_cb', $ret);

    だと思います。

    RFC2396 によると、URLに使用可能な文字は

    • reserved = “;” | “/” | “?” | “:” | “@” | “&” | “=” | “+” | “$” | “,”
    • unreserved = alphanum (英数字) | mark ( “-” | “_” | “.” | “!” | “~” | “*” | “‘” | “(” | “)” )
    • escaped = “%” hex hex (日本語などの unreserved 以外の文字は16進数のコードに変換後、頭に % をつけてエスケープする。)

    とあるので、[\w\\x80-\\xff\#%~/?@\[\]-]{1,2000} ではなく [\w\-\.!~*\'\(\);\/?:\@&=+\$,%\#]{1,2000} が正しいのでは無いでしょうか?

1件の返信を表示中 - 1 - 1件目 (全1件中)
  • モデレーター Seisuke Kuraishi

    (@tenpura)

    wokamotoさん

    こちら本体の問題となりますので trac の方へご報告くださると助かります。
    またその際は具体的な誤認識されるケースの例示があると良いと思います。

1件の返信を表示中 - 1 - 1件目 (全1件中)
  • トピック「WordPress コメント欄の URL 変換がおかしい気がします」には新たに返信することはできません。