在下面的网址
上替换字符串的最佳方式或最佳做法是什么?http://www.mysite.com/somefolder/123kf3lkf/abc.jpg
我想从上面的url替换值'123kf3lkf。
我不能使用基本的字符串替换,因为该部分的值可以是任何东西。 唯一的规则是它将是实际文件名'abc.jpg'之前的部分?
我想替换上面网址上的文字以形成以下网址
http://www.mysite.com/somefolder/mynewtext/abc.jpg
我要求用PHP执行此操作
答案 0 :(得分: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
答案 1 :(得分:0)
一种方法如下:
<?php
$str = "http://www.mysite.com/somefolder/123kf3lkf/abc.jpg";
$parts = explode('/', $str);
$parts[count($parts) - 2] = "myNewText";
$remixedURL = implode('/',$parts);
echo "$remixedURL";
?>
参考文献:
答案 2 :(得分:0)
我可以提出另外两个想法:
1.使用explode
并寻找最后一个地方。
$url_parts = explode("/",$url);
$string2replace = $url_parts[count($url_parts)-2];
$newString = str_replace($string2replace , "somethingnew" , $url);
2.使用Regex。
答案 3 :(得分: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