日本語
サポート
サポート » バグ報告と提案 » WordPress コメント欄の URL 変換がおかしい気がします
(@wokamoto)
12年、 10ヶ月前
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に使用可能な文字は
とあるので、[\w\\x80-\\xff\#%~/?@\[\]-]{1,2000} ではなく [\w\-\.!~*\'\(\);\/?:\@&=+\$,%\#]{1,2000} が正しいのでは無いでしょうか?
[\w\\x80-\\xff\#%~/?@\[\]-]{1,2000}
[\w\-\.!~*\'\(\);\/?:\@&=+\$,%\#]{1,2000}
(@tenpura)
wokamotoさん
こちら本体の問題となりますので trac の方へご報告くださると助かります。 またその際は具体的な誤認識されるケースの例示があると良いと思います。
(@wokamoto)
12年、 10ヶ月前
wp-includes/formatting.php に含まれる make_clickable() 関数の正規表現がおかしい気がします。
現状ですと、マルチバイト文字もURLとして認識されてしまっています。
具体的には1390行目の
ですが、正しくは
だと思います。
RFC2396 によると、URLに使用可能な文字は
とあるので、
[\w\\x80-\\xff\#%~/?@\[\]-]{1,2000}
ではなく[\w\-\.!~*\'\(\);\/?:\@&=+\$,%\#]{1,2000}
が正しいのでは無いでしょうか?