Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
drupal.org
link
Commits
da9b09a2
Commit
da9b09a2
authored
May 26, 2011
by
jcfiala
Browse files
Added slight changes to how links are validated to bring them in line with valid_url()
parent
5c0ebaa7
Changes
2
Hide whitespace changes
Inline
Side-by-side
link.module
View file @
da9b09a2
...
...
@@ -837,34 +837,35 @@ function link_validate_url($text) {
)),
ENT_QUOTES
,
'UTF-8'
);
$allowed_protocols
=
variable_get
(
'filter_allowed_protocols'
,
array
(
'http'
,
'https'
,
'ftp'
,
'news'
,
'nntp'
,
'telnet'
,
'mailto'
,
'irc'
,
'ssh'
,
'sftp'
,
'webcal'
));
$protocol
=
'(('
.
implode
(
"|"
,
$allowed_protocols
)
.
'):\/\/)'
;
$authentication
=
'(([a-z0-9%'
.
$LINK_ICHARS
.
']+(:[a-z0-9%'
.
$LINK_ICHARS
.
'!]*)?)?@)'
;
$domain
=
'(([a-z0-9'
.
$LINK_ICHARS_DOMAIN
.
']([a-z0-9'
.
$LINK_ICHARS_DOMAIN
.
'\-_\[\]])*)(\.(([a-z0-9'
.
$LINK_ICHARS_DOMAIN
.
'\-_\[\]])+\.)*('
.
LINK_DOMAINS
.
'|[a-z]{2}))?)'
;
$ipv4
=
'([0-9]{1,3}(\.[0-9]{1,3}){3})'
;
$ipv6
=
'([0-9a-fA-F]{1,4}(\:[0-9a-fA-F]{1,4}){7})'
;
$port
=
'(:([0-9]{1,5}))'
;
// Starting a parenthesis group with (?: means that it is grouped, but is not captured
$protocol
=
'((?:'
.
implode
(
"|"
,
$allowed_protocols
)
.
'):\/\/)'
;
$authentication
=
"(?:(?:(?:[\w\.\-\+!$&'\(\)*\+,;="
.
$LINK_ICHARS
.
"]|%[0-9a-f]
{
2
}
)+(?::(?:[\w"
.
$LINK_ICHARS
.
"\.\-\+%!$&'\(\)*\+,;=]|%[0-9a-f]
{
2
}
)*)?)?@)"
;
$domain
=
'(?:(?:[a-z0-9'
.
$LINK_ICHARS_DOMAIN
.
']([a-z0-9'
.
$LINK_ICHARS_DOMAIN
.
'\-_\[\]])*)(\.(([a-z0-9'
.
$LINK_ICHARS_DOMAIN
.
'\-_\[\]])+\.)*('
.
LINK_DOMAINS
.
'|[a-z]{2}))?)'
;
$ipv4
=
'(?:[0-9]{1,3}(\.[0-9]{1,3}){3})'
;
$ipv6
=
'(?:[0-9a-fA-F]{1,4}(\:[0-9a-fA-F]{1,4}){7})'
;
$port
=
'(?::([0-9]{1,5}))'
;
// Pattern specific to external links.
$external_pattern
=
'/^'
.
$protocol
.
'?'
.
$authentication
.
'?('
.
$domain
.
'|'
.
$ipv4
.
'|'
.
$ipv6
.
' |localhost)'
.
$port
.
'?'
;
// Pattern specific to internal links.
$internal_pattern
=
"/^([a-z0-9"
.
$LINK_ICHARS
.
"_\-+\[\]]+)"
;
$internal_pattern_file
=
"/^([a-z0-9"
.
$LINK_ICHARS
.
"_\-+\[\]\.]+)$/i"
;
$internal_pattern
=
"/^(
?:
[a-z0-9"
.
$LINK_ICHARS
.
"_\-+\[\]]+)"
;
$internal_pattern_file
=
"/^(
?:
[a-z0-9"
.
$LINK_ICHARS
.
"_\-+\[\]\.]+)$/i"
;
$directories
=
"(\/[a-z0-9"
.
$LINK_ICHARS
.
"_\-\.~+%=&,$'!():;*@\[\]]*)*"
;
$directories
=
"(
?:
\/[a-z0-9"
.
$LINK_ICHARS
.
"_\-\.~+%=&,$'!():;*@\[\]]*)*"
;
// Yes, four backslashes == a single backslash.
$query
=
"(\/?\?([?a-z0-9"
.
$LINK_ICHARS
.
"+_|\-\.\/
\\\\
%=&,$'():;*@\[\]{} ]*))"
;
$anchor
=
"(#[a-z0-9"
.
$LINK_ICHARS
.
"_\-\.~+%=&,$'():;*@\[\]\/\?]*)"
;
$query
=
"(
?:
\/?\?([?a-z0-9"
.
$LINK_ICHARS
.
"+_|\-\.\/
\\\\
%=&,$'():;*@\[\]{} ]*))"
;
$anchor
=
"(
?:
#[a-z0-9"
.
$LINK_ICHARS
.
"_\-\.~+%=&,$'():;*@\[\]\/\?]*)"
;
// The rest of the path for a standard URL.
$end
=
$directories
.
'?'
.
$query
.
'?'
.
$anchor
.
'?'
.
'$/i'
;
$message_id
=
'[^@].*@'
.
$domain
;
$newsgroup_name
=
'([0-9a-z+-]*\.)*[0-9a-z+-]*'
;
$newsgroup_name
=
'(
?:
[0-9a-z+-]*\.)*[0-9a-z+-]*'
;
$news_pattern
=
'/^news:('
.
$newsgroup_name
.
'|'
.
$message_id
.
')$/i'
;
$user
=
'[a-zA-Z0-9'
.
$LINK_ICHARS
.
'_\-\.\+\^!#\$%&*+\/\=\?\`\|\{\}~\'\[\]]+'
;
$email_pattern
=
'/^mailto:'
.
$user
.
'@'
.
'('
.
$domain
.
'|'
.
$ipv4
.
'|'
.
$ipv6
.
'|localhost)'
.
$query
.
'?$/'
;
$email_pattern
=
'/^mailto:'
.
$user
.
'@'
.
'(
?:
'
.
$domain
.
'|'
.
$ipv4
.
'|'
.
$ipv6
.
'|localhost)'
.
$query
.
'?$/'
;
if
(
strpos
(
$text
,
'<front>'
)
===
0
)
{
return
LINK_FRONT
;
...
...
tests/link.validate.test
View file @
da9b09a2
...
...
@@ -480,6 +480,9 @@ class LinkValidateUrlLight extends DrupalWebTestCase {
foreach
(
$links
as
$link
)
{
$valid
=
link_validate_url
(
$link
);
$this
->
assertEqual
(
LINK_EXTERNAL
,
$valid
,
'Testing that '
.
$link
.
' is a valid external link.'
);
// The following two lines are commented out and only used for comparisons.
//$valid2 = valid_url($link, TRUE);
//$this->assertEqual(TRUE, $valid2, "Using valid_url() on $link.");
}
}
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment