Php preg_replace更改图像宽度


Php preg_replace To change image width

我的数据库中有一些图像

http://***.com/2013/12/reign-death-midseason-finale-featured.jpg?w=500
http://***.com/reign-death-midseason-finale-featured.png?w=120
http://***.com/2013/12/finale-featured.jpg?w=50
http://***.com/2013/finale-featured.jpg?w=50&h=50
http://***.com/2013/12/reign-death-midseason-finale-featured.jpg

我想将w=的图像更改为相同的宽度,并将?w=50&h=50也更改为相同宽度。所有具有W的应为CCD_ 3和CCD_。这就是我尝试str_replace的原因,但有一个问题,w=总是会改变,在某些情况下还有高度,也需要改变,我有搜索网,发现用preg_replace可以做到这一点,不知道怎么做。

编辑

需要的答案是if(hight is null),结果是case 1 w=600if h is not null case 2 w=600&h=600请帮助

抱歉花了我一段时间,我有点忙

尝试以下

$pattern = '~(?<='W(w|h)'=)('d+?)(?='D|$)~';
$replace = '600';
$subject = 'http://localhost/2013/finale-featured.jpg?w=50&h=50';
echo preg_replace($pattern,$replace,$subject);

尝试使用多种URI

PS:这种高级字符串查找/替换是正则表达式的领域。如果你发现你需要做很多这样的事情,考虑开始学习它们,这本身就是一门完整的语言。我为这个特定的解决方案使用了一些断言(前瞻(?<=)和前瞻(?=)

如果您想避免使用正则表达式,可以将URL和查询字符串解析为数组,这将使计算查询字符串值变得更加容易。

$url = 'http://***.com/2013/finale-featured.jpg?w=50&h=50';
$urlArray = parse_url($url);
parse_str($urlArray['query'], $queryStringArray);
if ( !isset($queryStringArray['h']) || $queryStringArray['h'] === null ) {
} else if ( ... ) {
} else if ( ... ) {
}