Drupalは、文書にURLが、自動的にリンクしてくれます。
Drupalに標準搭載されているフィルター(入力書式)で、URLフィルタという機能が働いているためです。Filtered HTMLの設定をクリックすると、URLフィルタにチェックが付いているのが見れます。
フィルターは、チェックされた機能に従い、文書に存在するデータを発見し変換してくれます。URL以外にもメールアドレスだったり、画像を貼り付けたり。さらに、モジュールを追加するとYoutubeなどの動画なんかも簡単に貼り付けることが出来ます。
しかし、この便利なフィルターのURLフィルタにも、一つ欠点があります。
前後に全角空白があると、URLと認識してくれないのです。日本語の文書だと、こういうことがありますよね。
じゃあどうしたらいいの?
手っ取り早い方法であれば、直接モジュールを改良してしまいます。正規表現は苦手ですが、以下コードの修正でうまくいきました。
modules/filiter/filiter.module のファイルを開き1130行目を
- $text = preg_replace_callback("`(<p>|<li>|<br\s*/?>|[ \n\r\t\(])((http://|https://|ftp://|mailto:|smb://|afp://|file://|gopher://|news://|ssl://|sslv2://|sslv3://|tls://|tcp://|udp://)([a-zA-Z0-9@:%_+*~#?&=.,/;-]*[a-zA-Z0-9@:%_+*~#&=/;-]))([.,?!]*?)(?=(</p>|</li>|<br\s*/?>|[ \n\r\t\)]))`i", '_filter_url_parse_full_links', $text);
以下のとおり修正します。
- $text = preg_replace_callback("`(.*)((http://|https://|ftp://|mailto:|smb://|afp://|file://|gopher://|news://|ssl://|sslv2://|sslv3://|tls://|tcp://|udp://)([a-zA-Z0-9@:%_+*~#?&=.,/;-]*[a-zA-Z0-9@:%_+*~#&=/;-]))([.,?!]*?)(?=(.*|[ \n\r\t\)]))`i", '_filter_url_parse_full_links', $text);
ただしこのやり方だと、Drupalがマイナーバージョンアップでfiliter.moduleを上書きするたびに元に戻ります。
こういうときはモジュールを作るしかありません。
誰か作ってくれていないかな~(笑




新しいコメントの投稿