valid_url
- Versions
- 4.6 – 7
valid_url($url, $absolute = FALSE)
Verify the syntax of the given URL.
This function should only be used on actual URLs. It should not be used for Drupal menu paths, which can contain arbitrary characters. Valid values per RFC 3986.
Parameters
$url The URL to verify.
$absolute Whether the URL is absolute (beginning with a scheme such as "http:").
Return value
TRUE if the URL is in a valid format.
Related topics
Code
includes/common.inc, line 973
<?php
function valid_url($url, $absolute = FALSE) {
if ($absolute) {
return (bool)preg_match("
/^ # Start at the beginning of the text
(?:ftp|https?):\/\/ # Look for ftp, http, or https schemes
(?: # Userinfo (optional) which is typically
(?:(?:[\w\.\-\+!$&'\(\)*\+,;=]|%[0-9a-f]{2})+:)* # a username or a username and password
(?:[\w\.\-\+%!$&'\(\)*\+,;=]|%[0-9a-f]{2})+@ # combination
)?
(?:
(?:[a-z0-9\-\.]|%[0-9a-f]{2})+ # A domain name or a IPv4 address
|(?:\[(?:[0-9a-f]{0,4}:)*(?:[0-9a-f]{0,4})\]) # or a well formed IPv6 address
)
(?::[0-9]+)? # Server port number (optional)
(?:[\/|\?]
(?:[\w#!:\.\?\+=&@$'~*,;\/\(\)\[\]\-]|%[0-9a-f]{2}) # The path and query (optional)
*)?
$/xi", $url);
}
else {
return (bool)preg_match("/^(?:[\w#!:\.\?\+=&@$'~*,;\/\(\)\[\]\-]|%[0-9a-f]{2})+$/i", $url);
}
}
?>Login or register to post comments 
problem with non-latin characters
valid_url will always return a FALSE for http://news.google.com/news?pz=1&hl=ar&q=دروبال&cf=all&output=rss where what is between &q= and &cf is the arabic word for drupal. Of course, if دروبال is replaced by its hex equivalent as in http://news.google.com/news?pz=1&hl=ar&q=%D8%AF%D8%B1%D9%88%D8%A8%D8%A7%... the valid_url return true but both should return TRUE.
Opened issue on http://drupal.org/node/624824