十月
5
网上找了好几个用于php的将链接相对路径转换为绝对路径的方法,发现都不能考虑周全,有些非一般的链接写法并不能成功转换,比如“"”、“'”、“./”、“../”等。修改并测试成功后放出来大家共享,如果有bug的话欢迎纠正。
- <?php
- /*相对路径转为绝对路径的方法*/
- function RealUrl($subject_url,$replace_url) //$subject_url为要转换的页面(包含文件名)
- {
- $urls = parse_url($subject_url);
- $pnum = substr_count($replace_url,'../');
- $isabs = strpos($replace_url,'://');
- if($isabs && $isabs<6)
- return $replace_url;
- else if(substr($replace_url,0,1) == '/')
- $replace_url = 'http://'.$urls['host'].$replace_url;
- else if(substr($replace_url,0,2) == './')
- $replace_url = dirname($subject_url).substr($replace_url,1);
- else if($pnum>0)
- {
- for($i=0;$i<($pnum+1);$i++)
- {
- $subject_url = dirname($subject_url);
- }
- $replace_url = str_replace('../','',$replace_url);
- $replace_url = $subject_url.'/'.$replace_url;
- }
- else
- $replace_url = dirname($subject_url).'/'.$replace_url;
- return $replace_url;
- }
- /*调用上一个函数,将网页代码的链接转换为绝对路径*/
- function RealUrlCode($subject_url,$code) {
- $patterns = array("/(<a\s+.*href=[\"|']?)([^>\"'\s]+?)(\s*[^>]*>)/iesU",
- "/(<img\s+.*src=[\"|']?)([^>\"'\s]+?)(\s*[^>]*>)/iesU");
- $replace = "'\$1'.RealUrl('$subject_url','\$2').'\$3'";
- $new_code = preg_replace($patterns, $replace, $code);
- $new_code = stripslashes($new_code);
- return $new_code;
- }
- /*例子*/
- echo RealUrlCode('页面地址','页面内容'); //打印转换后的页面内容
- ?>
补充:php自带的用于本地文件相对路径转换绝对路径的函数是realpath (),但函数要求文件必需存在。
订阅评论
还是有点问题,你试着匹配一下这个字符串:
src='upload/ime.asp'
后面的那个src='upload/ime.asp'被匹配了,而中间的那个没有被匹配。