'[youtube]$2[/youtube]',
$s
);
-
+
$s = preg_replace(
'#<iframe[^>](.*?)https?://www.youtube.com/embed/([A-Za-z0-9\-_=]+)(.*?)</iframe>#ism',
'[youtube]$2[/youtube]',
$s
);
-
+
$s = preg_replace(
'#<iframe[^>](.*?)https?://player.vimeo.com/video/([0-9]+)(.*?)</iframe>#ism',
'[vimeo]$2[/vimeo]',
$s
);
-
+
return $s;
}
-
+
/**
* transform link href and img src from relative to absolute
*
if (empty($base)) {
return $text;
}
-
+
$base = rtrim($base, '/');
-
+
$base2 = $base . "/";
-
+
// Replace links
$pattern = "/<a([^>]*) href=\"(?!http|https|\/)([^\"]*)\"/";
$replace = "<a\${1} href=\"" . $base2 . "\${2}\"";
$text = preg_replace($pattern, $replace, $text);
-
+
$pattern = "/<a([^>]*) href=\"(?!http|https)([^\"]*)\"/";
$replace = "<a\${1} href=\"" . $base . "\${2}\"";
$text = preg_replace($pattern, $replace, $text);
-
+
// Replace images
$pattern = "/<img([^>]*) src=\"(?!http|https|\/)([^\"]*)\"/";
$replace = "<img\${1} src=\"" . $base2 . "\${2}\"";
$text = preg_replace($pattern, $replace, $text);
-
+
$pattern = "/<img([^>]*) src=\"(?!http|https)([^\"]*)\"/";
$replace = "<img\${1} src=\"" . $base . "\${2}\"";
$text = preg_replace($pattern, $replace, $text);
-
-
+
+
// Done
return $text;
}
return Renderer::replaceMacros(Renderer::getMarkupTemplate('searchbox.tpl'), $values);
}
- /**
- * Replace naked text hyperlink with HTML formatted hyperlink
- *
- * @param string $s
- * @return string
- */
- public static function toLink(string $s): string
- {
- $s = preg_replace("/(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\'\%\$\!\+]*)/", ' <a href="$1" target="_blank" rel="noopener noreferrer">$1</a>', $s);
- $s = preg_replace("/\<(.*?)(src|href)=(.*?)\&\;(.*?)\>/ism", '<$1$2=$3&$4>', $s);
- return $s;
- }
-
/**
* Given a HTML text and a set of filtering reasons, adds a content hiding header with the provided reasons
*
use Friendica\Content\ForumManager;
use Friendica\Content\Nav;
use Friendica\Content\Text\BBCode;
-use Friendica\Content\Text\HTML;
use Friendica\Core\Config\Capability\IManageConfigValues;
use Friendica\Core\Hook;
use Friendica\Core\L10n;
use Friendica\Protocol\ActivityPub;
use Friendica\Util\DateTimeFormat;
use Friendica\Util\Profiler;
+use Friendica\Util\Strings;
use Friendica\Util\Temporal;
use Psr\Log\LoggerInterface;
}
if ($profile['homepage']) {
- $basic_fields += self::buildField('homepage', $this->t('Homepage:'), HTML::toLink($profile['homepage']));
+ $basic_fields += self::buildField(
+ 'homepage',
+ $this->t('Homepage:'),
+ $this->tryRelMe($profile['homepage']) ?: $profile['homepage']
+ );
}
if (
$custom_fields += self::buildField(
'custom_' . $profile_field->order,
$profile_field->label,
- BBCode::convertForUriId($profile['uri-id'], $profile_field->value),
+ $this->tryRelMe($profile_field->value) ?: BBCode::convertForUriId($profile['uri-id'], $profile_field->value),
'aprofile custom'
);
}
return $htmlhead;
}
+
+ /**
+ * Check if the input is an HTTP(S) link and returns a rel="me" link if yes, empty string if not
+ *
+ * @param string $input
+ * @return string
+ */
+ private function tryRelMe(string $input): string
+ {
+ if (preg_match(Strings::onlyLinkRegEx(), trim($input))) {
+ return '<a href="' . trim($input) . '" target="_blank" rel="noopener noreferrer me">' . trim($input) . '</a>';
+ }
+
+ return '';
+ }
}
* Returns the regular expression string to match URLs in a given text
*
* @return string
- * @see https://daringfireball.net/2010/07/improved_regex_for_matching_urls
*/
public static function autoLinkRegEx(): string
{
return '@
-(?<![=\'\]"/]) # Not preceded by [, =, \', ], ", /
+(?<![=\'\]"/]) # Not preceded by [, =, \', ], ", /
\b
-( # Capture 1: entire matched URL
- https?:// # http or https protocol
+( # Capture 1: entire matched URL
+ ' . self::linkRegEx() . '
+)@xiu';
+ }
+
+ /**
+ * Returns the regular expression string to match only an HTTP URL
+ *
+ * @return string
+ */
+ public static function onlyLinkRegEx(): string
+ {
+ return '@^' . self::linkRegEx() . '$@xiu';
+ }
+
+ /**
+ * @return string
+ * @see https://daringfireball.net/2010/07/improved_regex_for_matching_urls
+ */
+ private static function linkRegEx(): string
+ {
+ return 'https?:// # http or https protocol
(?:
- [^/\s\xA0`!()\[\]{};:\'",<>?«»“”‘’.] # Domain can\'t start with a .
- [^/\s\xA0`!()\[\]{};:\'",<>?«»“”‘’]+ # Domain can\'t end with a .
+ [^/\s\xA0`!()\[\]{};:\'",<>?«»“”‘’.] # Domain can\'t start with a .
+ [^/\s\xA0`!()\[\]{};:\'",<>?«»“”‘’]+ # Domain can\'t end with a .
\.
[^/\s\xA0`!()\[\]{};:\'".,<>?«»“”‘’]+/? # Followed by a slash
)
- (?: # One or more:
- [^\s\xA0()<>]+ # Run of non-space, non-()<>
- | # or
- \(([^\s\xA0()<>]+|(\([^\s()<>]+\)))*\) # balanced parens, up to 2 levels
- | # or
- [^\s\xA0`!()\[\]{};:\'".,<>?«»“”‘’] # not a space or one of these punct chars
- )*
-)@xiu';
+ (?: # One or more:
+ [^\s\xA0()<>]+ # Run of non-space, non-()<>
+ | # or
+ \(([^\s\xA0()<>]+|(\([^\s()<>]+\)))*\) # balanced parens, up to 2 levels
+ | # or
+ [^\s\xA0`!()\[\]{};:\'".,<>?«»“”‘’] # not a space or one of these punct chars
+ )*';
}
/**