我们从服务器检索了很多图像,所有这些尺寸都是随机的。我们需要使它们相同。
如果我知道固定大小,则发布的代码会很好用,但是我希望它可以长期运行,即使源更改了字符串文件的宽度也是如此。
我搜索了一会儿,发现一些具有完整功能的代码可能使之成为可能,但是在数组键中只有一个通配符的情况下什么都没有。
这不是一种选择吗?
我尝试使用*,\ d +和其他一些正则表达式变量,但失败了。
function resize ($width = '150'){
$raw_img_src = http://longurl/img.file?width=[random];
$replace_sizes = array("width=[random]" => "width=$width");
$img_src = strtr($raw_img_src, $replace_sizes);
}
最终结果应该在 http://longurl/img.file?width=123; 应该改成 http://longurl/img.file?width=150;
谢谢。
更新:这两个都是很好的答案,谢谢。我们选了最短的一个。
// OR
$img_src = preg_replace('#\bwidth=\d+#', "width=$width", $raw_img_src);
$img_src = preg_replace('#\bheight=\d+#', "height=$height", $img_src);
$img_src = rawurlencode($img_src);
// OR
$parts = parse_url($raw_img_src);
$uri_parts = explode('?', $raw_img_src)[0];
parse_str($parts['query'], $query);
$query['width'] = $width;
$query['height'] = $height;
$img_src = $uri_parts.'?'.http_build_query($query);
$img_src = rawurlencode($img_src);
答案 0 :(得分:2)
您可以使用正则表达式,但是不使用任何 regex 的方式如何。网址中的width
参数不需要任何特定的顺序。另外,您可以更好地控制参数以进行修改。
<?php
$url = 'http://longurl/img.file?width=123&name=kim';
$parts = parse_url($url);
$uri_parts = explode('?', $url)[0];
parse_str($parts['query'], $query);
$query['width'] = 150;
echo $uri_parts.'?'.http_build_query($query);
?>
输出:
http://longurl/img.file?width=150&name=kim
答案 1 :(得分:1)
不确定您的需求:
function resize ($width = '150'){
$raw_img_src = 'http://longurl/img.file?width=[random]';
$img_src = preg_replace('#width=\[random\]#', "width=$width", $raw_img_src);
}
但是如果[random]
是实际宽度,则可能是这样:
function resize ($width = '150'){
// by example http://longurl/img.file?width=512
$raw_img_src = 'http://longurl/img.file?width=[random]';
$img_src = preg_replace('#width=\d+#', "width=$width", $raw_img_src);
}
如果您想使用[]
,请考虑使用引号,所有特殊字符都必须用引号引起来:
http://php.net/manual/fr/function.preg-quote.php