PHP规范化远程url';s
是否有任何快速函数可以将:PHP规范化远程url';s,php,html,url,encoding,formatting,Php,Html,Url,Encoding,Formatting,是否有任何快速函数可以将:HtTp://www.ExAmPle.com/blah转换为http://www.example.com/blah 基本上,我希望降低url中不区分大小写的部分。不,您必须自己编写代码 但是您可以使用将URL拆分为多个部分。我相信这个类将满足您的需求。下面是一个解决方案,它扩展了@ThiefMaster已经提到的内容: function urltolower($url){ if (($_url = parse_url($url)) !== false){ // v
HtTp://www.ExAmPle.com/blah
转换为http://www.example.com/blah
基本上,我希望降低url中不区分大小写的部分。不,您必须自己编写代码
但是您可以使用将URL拆分为多个部分。我相信这个
类将满足您的需求。下面是一个解决方案,它扩展了@ThiefMaster已经提到的内容:
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
}
注意:没有经过战斗测试,但它应该能让你继续前进。因为你要求“快速”,这里有一个单行程序可以完成这项工作:
$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
编辑/添加:
我已经测试过,这个版本比使用带匿名函数的preg_replace_回调快55%左右:
echo preg_replace(
'#(^[a-z]+://)(.+@)?([^/]+)(.*)$#ei',
"strtolower('\\1').'\\2'.strtolower('\\3').'\\4'",
$url);
这似乎是一种明智的方法,因为与使用strtolower相比,它使开发人员能够更好地控制流程,这可能会破坏URI中区分大小写的部分。如果您希望快速完成某项任务,或者希望自己完成某项任务,这似乎是一种过火的做法。仅供参考,如果有用户但没有通过,这将中断。或者如果user、pass、query或fragment的值为零。而且,在任何情况下都会发出警告。在这种情况下,应该执行“if(isset($var))”而不是“if($var)”,在这种情况下,这些变量可能未设置,如果设置,则可能有效,但计算结果为零。此外,还将删除端口。我不会声称我的regex one衬里是防弹的,但它没有这些问题。祝你好运。这看起来更可靠,谢谢预先确定的:preg_replace():不推荐使用/e修饰符,请改用preg_replace_回调