PHP规范化远程URL

时间:2011-05-09 21:38:09

标签: php html url encoding formatting

是否有任何快速功能可以将HtTp://www.ExAmPle.com/blah转换为http://www.example.com/blah

基本上我想小写一个url的不区分大小写的部分。

4 个答案:

答案 0 :(得分:5)

不,你必须自己编写代码。

但您可以使用parse_url()将网址拆分为其中的部分。

答案 1 :(得分:3)

既然你要求“快速”,这里就是一个完成这项工作的单线:

$url = 'HtTp://User:Pass@www.ExAmPle.com:80/Blah';

echo preg_replace_callback(
  '#(^[a-z]+://)(.+@)?([^/]+)(.*)$#i',
  create_function('$m',
                  'return strtolower($m[1]).$m[2].strtolower($m[3]).$m[4];'),
  $url);

输出:

http://User:Pass@www.example.com:80/Blah

修改/ ADD:

我已经测试过,这个版本比使用preg_replace_callback和匿名函数快55%:

echo preg_replace(
  '#(^[a-z]+://)(.+@)?([^/]+)(.*)$#ei',
  "strtolower('\\1').'\\2'.strtolower('\\3').'\\4'",
  $url);

答案 2 :(得分:1)

答案 3 :(得分:1)

这是一个解决方案,扩展了@ThiefMaster已经提到的内容:

<强> DEMO

function urltolower($url){
  if (($_url = parse_url($url)) !== false){ // valid url
    $newUrl = strtolower($_url['scheme']) . "://";
    if ($_url['user'] && $_url['pass'])
      $newUrl .= $_url['user'] . ":" . $_url['pass'] . "@";
    $newUrl .= strtolower($_url['host']) . $_url['path'];
    if ($_url['query'])
      $newUrl .= "?" . $_url['query'];
    if ($_url['fragment'])
      $newUrl .= "#" . $_url['fragment'];
    return $newUrl;
  }
  return $url; // could return false if you'd like
}

注意:没有经过测试,但它应该让你去。