[support] [bug in valid_url ?] url with specials chars not filtered

pyg pyg at framasoft.net
Tue Oct 30 13:57:26 UTC 2007


Hello world,

Here's my first question (Drupal 5.3) : some of my input text fields
contains urls like :
- http://collab.sakaiproject.org/portal/site/!gateway/page/!gateway-100
or
- http://www.mediawiki.org/wiki/Manual:Configuration_settings_(alphabetical)

This url are not converted like others in url (i suppose because some
"!" and "(" are part of them).

I found that http://api.drupal.org/api/function/valid_url/5 may be
incomplete for some regular, W3C and RFCs valid chars :
-------
function valid_url($url, $absolute = FALSE) {
  $allowed_characters = '[a-z0-9\/:_\-_\.\?\$,;~=#&%\+]';
  if ($absolute) {
    return preg_match("/^(http|https|ftp):\/\/". $allowed_characters
."+$/i", $url);
  }
  else {
    return preg_match("/^". $allowed_characters ."+$/i", $url);
  }
}
-------------

Same thing for http://api.drupal.org/api/function/_filter_url/5

I'm quite surprised of that...

Found some pseudo patches on the web (like
http://amadain.net/node?page=2 ) but I I'm curious to know what some
regular signs are not added to the regex....

Is it a bug or a feature ? If it's a bug (I think that someone else
must have already noticed that behavior) should I report it ?

By the way, I tried to complete the regex by moifying
  $allowed_characters = '[a-z0-9\/:_\-_\.\?\$,;~=#&%\+]';
with
  $allowed_characters = '[a-z0-9\/:_\-_\.\?\$,;~=#&%\+!\(\)]';
and same in _filter_url function, but it doesn't seems to work... :-(

Any Idea why ?

cheers

Pierre-Yves


More information about the support mailing list