Drupal、日本語全角空白にも対応したURLフィルタ

このエントリーをはてなブックマークに追加
投稿者:chikunai 投稿日時:2008-11-18(火) 23:24

Drupalは、文書にURLが、自動的にリンクしてくれます。

Drupalに標準搭載されているフィルター(入力書式)で、URLフィルタという機能が働いているためです。Filtered HTMLの設定をクリックすると、URLフィルタにチェックが付いているのが見れます。

フィルターは、チェックされた機能に従い、文書に存在するデータを発見し変換してくれます。URL以外にもメールアドレスだったり、画像を貼り付けたり。さらに、モジュールを追加するとYoutubeなどの動画なんかも簡単に貼り付けることが出来ます。

しかし、この便利なフィルターのURLフィルタにも、一つ欠点があります。

前後に全角空白があると、URLと認識してくれないのです。日本語の文書だと、こういうことがありますよね。

じゃあどうしたらいいの?

手っ取り早い方法であれば、直接モジュールを改良してしまいます。正規表現は苦手ですが、以下コードの修正でうまくいきました。

modules/filiter/filiter.module のファイルを開き1130行目を

  1.   $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);

以下のとおり修正します。

  1.   $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を上書きするたびに元に戻ります。
こういうときはモジュールを作るしかありません。

誰か作ってくれていないかな~(笑




コメント(0)

新しいコメントの投稿

このフィールドの内容は非公開にされ、公表されることはありません。
  • 使用できるHTMLタグ: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img> <table> <tr> <th> <td>
  • 行と段落は自動的に折り返されます。
  • You can use BBCode tags in the text. URLs will automatically be converted to links.
  • 次のタグを使用してソースコード構文をハイライトすることができます。: <code>, <blockcode> The supported tag styles are: <foo>, [foo].
  • You may insert videos with [video:URL]
  • ウェブページアドレスとメールアドレスは、自動的にハイパーリンクに変換されます。

書式オプションに関するより詳しい情報...

CAPTCHA
この問題はユーザが人間であるかどうかをテストし、スパムによる自動投稿を防ぐためのものです。
Image CAPTCHA
Enter the characters shown in the image.
Drupal theme by Kiwi Themes.