使用preg_replace替换url中的用户名和密码

时间:2011-05-19 20:25:26

标签: php regex

4 个答案:

答案 0 :(得分:2)

使用parse_url()它拥有您需要的一切。

示例:

$url = 'ftp://name:pass@example.com/file.mov';
print_r(parse_url($url));

输出:

Array
(
    [scheme] => ftp
    [host] => example.com
    [user] => name
    [pass] => pass
    [path] => /file.mov
    [query] => 
    [fragment] => 
)

然后您可以像这样建立新的网址:

$url    = parse_url($url);
$newUrl = $url['scheme'].'://'.$url['host'].$url['path'].$url['query'].$url['fragment'];

答案 1 :(得分:1)

执行此操作的最佳方法可能是使用parse_url:获取组件,修改它们,然后将它们构建回字符串。

$parts = parse_url('ftp://name:pass@example.com/file.mov');
$parts['user'] = 'newusername';
$parts['pass'] = 'newpassword';

$url = $parts['scheme'] . '://' . 
       (isset($parts['user']) ? $parts['user'] : '') . 
       (isset($parts['pass']) ? ':' . $parts['pass'] . '@' : '') . 
       $parts['host'] .
       $parts['path'] . 
       (isset($parts['query']) ? '?' . $parts['query'] : '') . 
       (isset($parts['fragment']) ? '#' . $parts['fragment'] : '');

答案 2 :(得分:1)

替换正则表达式

([a-z]+://)[^@]*(@.*)

带有以下反向引用

$1$2

所以我猜在php中看起来像

preg_replace ("([a-z]+://)[^@]*(@.*)", "$1$2", $yourstring)

答案 3 :(得分:1)

不是最有效也不最可靠的方式,但我想尝试使用正则表达式。事实证明这很容易:

preg_replace("#(?<=://)[^:@]+(:[^@]+)?(?=@)#","...",$url);