forked from mirror/pixelfed
38 lines
953 B
PHP
38 lines
953 B
PHP
|
<?php
|
||
|
|
||
|
namespace App\Util\Lexer;
|
||
|
|
||
|
class Nickname {
|
||
|
|
||
|
public static function normalizeProfileUrl($url)
|
||
|
{
|
||
|
if(!str_contains($url, '@') && filter_var($url, FILTER_VALIDATE_URL)) {
|
||
|
$parsed = parse_url($url);
|
||
|
$username = str_replace(['/','\\','@'], '', $parsed['path']);
|
||
|
return ['domain' => $parsed['host'], 'username' => $username];
|
||
|
}
|
||
|
$parts = explode('@', $url);
|
||
|
$username = null;
|
||
|
$domain = null;
|
||
|
|
||
|
foreach ($parts as $part) {
|
||
|
|
||
|
// skip empty array slices
|
||
|
if(empty($part)) {
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
// if slice contains . assume its a domain
|
||
|
if(str_contains($part, '.')) {
|
||
|
$domain = filter_var($part, FILTER_VALIDATE_URL) ?
|
||
|
parse_url($part, PHP_URL_HOST) :
|
||
|
$part;
|
||
|
} else {
|
||
|
$username = $part;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
return ['domain' => $domain, 'username' => $username];
|
||
|
}
|
||
|
|
||
|
}
|