0

替换以下网址上的字符串的最佳方法或最佳实践是什么

http://www.mysite.com/somefolder/123kf3lkf/abc.jpg

我想从上面的 url 中替换值 '123kf3lkf'。

我不能使用基本字符串替换,因为该部分的值可以是任何东西。唯一的规则是它将是实际文件名“abc.jpg”之前的部分?

我想替换上述网址上的文字以形成以下网址

http://www.mysite.com/somefolder/mynewtext/abc.jpg

我需要用 PHP 做到这一点

4

4 回答 4

2

你可以试试这个

$replace = "mynewtext" ;                                            
$url = "http://www.mysite.com/somefolder/123kf3lkf/abc.jpg?test=123kf3lkf";
                                            ^-----   Note this  ---^

$find = basename(pathinfo($url,PATHINFO_DIRNAME));
echo str_replace("/$find/", "/$replace/", $url);

输出

 http://www.mysite.com/somefolder/mynewtext/abc.jpg?test=123kf3lkf
                                                            ^--- Sill Intact
于 2012-10-15T10:10:32.153 回答
0

一种方法如下:

<?php
 $str = "http://www.mysite.com/somefolder/123kf3lkf/abc.jpg";
 $parts = explode('/', $str);
 $parts[count($parts) - 2] = "myNewText";
 $remixedURL = implode('/',$parts);
 echo "$remixedURL";
?>

键盘演示

参考:

于 2012-10-15T10:18:37.120 回答
0

我可以提出另外两个想法:

1.使用explode并寻找LAST-1的地方。

$url_parts = explode("/",$url);
$string2replace = $url_parts[count($url_parts)-2];
$newString = str_replace($string2replace , "somethingnew" , $url);

2.使用正则表达式。

于 2012-10-15T10:18:50.407 回答
0

正则表达式解决方案:

$url         = 'http://www.mysite.com/somefolder/123kf3lkf/abc.jpg?foo=123kf3lkf';
$replacement = 'xxxxx';
$replaced    = preg_replace('@^(.+/)(?:[^/]+)(/[^\.]+(?:\..*)?(?:\?.*)?)$@',
                            '\\1' . $replacement . '\\2', $url);
echo $replaced; // http://www.mysite.com/somefolder/xxxxx/abc.jpg?foo=123kf3lkf
于 2012-10-15T10:32:55.657 回答