我在php中将以下链接作为字符串:
$url = 'http://www.example.com/assets/images/temp/10.jpg';
我想在数字之前加上BIG这个词,所以最后我会:
$url = 'http://www.example.com/assets/images/temp/big10.jpg';
我目前正在通过在/
上使用explode然后在最后一个数组中添加big来完成此操作。我唯一的问题是,将来这个链接可能会少/
,即:http://www.example.com/assets/10.jpg
。在这种情况下,我的爆炸声明将不起作用。在/
的最后一次出现后,是否有更好的方法来添加单词big?
我也想出了这个方法:
$url = 'http://www.example.com/assets/images/temp/10.jpg';
$filename = substr(strrchr($url, "/"), 1); // returns 10.jpg
$newfilename = 'big'.substr(strrchr($url, "/"), 1); // returns big10.jpg
$newurl = str_replace($filename,$newfilename,$url); // replaces 10.jpg with big.jpg
答案 0 :(得分:0)
Explode
将始终有效。但是,如果你想要一个更简洁的方法,你可以这样做:
$url = 'http://www.example.com/assets/images/temp/10.jpg';
$newurl = substr_replace($url, "big", strrpos($url, '/') + 1, 0);
这将给出您的预期结果:http://www.example.com/assets/images/temp/big10.jpg
答案 1 :(得分:0)
根据上述问题中提到的描述作为解决方案,请尝试执行以下代码片段。
<?php
$url = 'http://www.example.com/assets/images/temp/10.jpg';
$fileName = basename($url);
$newFileName = 'big' . $fileName;
$url = str_ireplace($fileName, $newFileName, $url);
echo $url;
?>
答案 2 :(得分:0)
有很多方法可以实现你想要的东西。
对我而言,最简单的方法是使用pathinfo
提取文件名,然后将您的前缀附加到basename
。
$prefix = 'big';
$url = 'http://www.example.com/assets/images/temp/10.jpg';
$pathinfo = pathinfo($url);
var_dump($pathinfo['dirname'] . '/' . $prefix . $pathinfo['basename']);
string(51) "http://www.example.com/assets/images/temp/big10.jpg"
面向对象的方法:https://3v4l.org/aF5lf
class FileNamePrefixer extends SplFileInfo
{
public function addPrefix($prefix)
{
return $this->getPathInfo() . '/' . $prefix . $this->getBaseName();
}
}
$url = 'http://www.example.com/assets/images/temp/10.jpg';
$fileInfo = new FileNamePrefixer($url);
var_dump($fileInfo->addPrefix('big'));
另一种方法是使用preg_replace
指定要替换的单词模式。
$prefix = 'big';
$url = 'http://www.example.com/assets/images/temp/10.jpg';
$new_url = preg_replace('/([\w|\s|-]+)(\.\w+)$/', $prefix . '$1$2', $url);
var_dump($new_url);
模式([\w|\s|-]+)(\.\w+)$
表示;在字符串的末尾,查找单词(字符:az,AZ,0-9,_,空格和 - ),后跟一个句点,后跟另一个单词和商店它们位于变量$1
和$2
。
string(51) "http://www.example.com/assets/images/temp/big10.jpg"
请注意,如果您的网址可选地包含片段或查询字符串,则上述preg_replace
模式将无效。相反,您需要将它们视为可选项,如下所示:
$prefix = 'big';
$url = 'http://www.example.com/assets/images/temp/10.jpg?foo=bar&baz=foo#foobar';
$new_url = preg_replace('/([\w|\s|-]+)(\.\w+)(\?.+)?(#.+)?$/', $prefix . '$1$2$3$4', $url);
var_dump($new_url);
模式(\?.+)?(#.+)?
表示;可选择吗?后跟任何内容,并可选择查找#后跟任何内容,并将其存储在原始模式的变量$3
和$4
中。
string(74) "http://www.example.com/assets/images/temp/big10.jpg?foo=bar&baz=foo#foobar"