Php preg_replace更改图像宽度

时间:2013-12-13 18:33:57

标签: php preg-replace

我的数据库中有一些图像

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都应该是w=600w=600&h=600。这就是我正在尝试的str_replace,但是有一个问题,w=总是会改变,在某些情况下也有高度,也需要更改,我有搜索网,发现它可以使用preg_replace不知道如何完成。

修改

所需答案if(hight is null)结果为case 1 w=600if h is not null case 2 w=600&h=600 请帮忙

2 个答案:

答案 0 :(得分:1)

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

尝试以下

$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:这种高级字符串查找/替换是正则表达式的域。如果您发现需要做很多这方面的事情,请考虑开始了解它们,它本身就是一种完整的语言。我使用了一些断言(lookahead (?<=)和lookbehind (?=))这个特定的解决方案

答案 1 :(得分:0)

如果要避免使用正则表达式,可以将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 ( ... ) {

}