PHP 标准化远程 URL

发布于 2024-11-05 17:27:59 字数 138 浏览 0 评论 0原文

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

基本上我想将 url 中不区分大小写的部分小写。

Is there any quick function that will convert: HtTp://www.ExAmPle.com/blah to http://www.example.com/blah

Basically I want to lower case the case-insensitive parts of a url.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

北恋 2024-11-12 17:27:59

不,您必须自己为其编写代码。

但是您可以使用 parse_url() 将 URL 拆分为多个部分。

No, you'll have to write code for it on your own.

But you can use parse_url() to split the URL into its parts.

萌面超妹 2024-11-12 17:27:59

既然你要求“快速”,这里有一个单行代码可以完成这项工作:

$url = 'HtTp://User:[email protected]: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:[email protected]:80/Blah

编辑/添加:

我已经测试过,这个版本比使用带有匿名的 preg_replace_callback 快大约 55%功能:

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

Since you asked for "quick," here's a one-liner that does the job:

$url = 'HtTp://User:[email protected]:80/Blah';

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

Outputs:

http://User:[email protected]:80/Blah

EDIT/ADD:

I've tested, and this version is about 55% faster than using preg_replace_callback with an anonymous function:

echo preg_replace(
  '#(^[a-z]+://)(.+@)?([^/]+)(.*)$#ei',
  "strtolower('\\1').'\\2'.strtolower('\\3').'\\4'",
  $url);
孤蝉 2024-11-12 17:27:59

I believe this class will do what you're looking for http://www.glenscott.co.uk/blog/2011/01/09/normalize-urls-with-php/

绿光 2024-11-12 17:27:59

这是一个解决方案,扩展了 @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
}

注意:未经实战测试,但它应该可以帮助您前进。

Here's a solution, expanding on what @ThiefMaster already mentioned:

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
}

Note: Not battle-tested but it should get you going.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文