2

我有这个字符串:

"cursor:pointer; background:url(http://maps.google.com/staticmap?center=38.7376583333,-9.1658583333&maptype=satellite&zoom=14&size=300x300&key=ABQIAAAAvQ9c8pqKsi8K2dzb7UM9MhS13VDmd70a9rmDETSCgg2iXt3XnhQSnX4vFKfWO-3vdWNV5HHBnSLWLQ&sensor=true&hl=pt) no-repeat"

我想删除纬度和经度。所以我想剪断字符串的左边,直到"center="右边开始"&maptype="

所以我已经剪掉了左边的部分,但现在我不知道如何剪掉右边的部分。

编辑:

$h1['style']=$html->find('td.sendGps',0)->style;

$string=$h1['style'];  // i have this, which does not work like the $string=""cursor:pointer; background:url(http://maps.google.com/staticmap?center=38.7376583333,-9.1658583333&maptype=satellite&zoom=14&size=300x300&key=ABQIAAAAvQ9c8pqKsi8K2dzb7UM9MhS13VDmd70a9rmDETSCgg2iXt3XnhQSnX4vFKfWO-3vdWNV5HHBnSLWLQ&sensor=true&hl=pt) no-repeat""
$inicio = "?center=";
$fim = "&maptype=";

$b = substr($string, strpos($string, $inicio) + 8);
4

4 回答 4

3

这可能比您想经历的要多,但可以从 URL 中提取和分解 URL 和查询字符串:

<?php

$data = "cursor:pointer; background:url(http://maps.google.com/staticmap?center=38.7376583333,-9.1658583333&maptype=satellite&zoom=14&size=300x300&key=ABQIAAAAvQ9c8pqKsi8K2dzb7UM9MhS13VDmd70a9rmDETSCgg2iXt3XnhQSnX4vFKfWO-3vdWNV5HHBnSLWLQ&sensor=true&hl=pt) no-repeat";

$url = substr($data, strpos($data, 'url(') + 4);
$url = parse_url(substr($url, 0, strpos($url, ') ')));

print_r($url);

$query = explode('&', $url['query']);
$querypairs = array();

for ($i = 0, $l = count($query); $i < $l; $i++) {
    $pair = explode('=', $query[$i]);
    $querypairs[$pair[0]] = $pair[1];
}

print_r($querypairs);

?>

http://codepad.org/xRZ3zEcU

现在,如果您真的想这样做,以便您可以重新组合成 CSS 定义以供以后使用,您可以反转它,但我可能会尝试以类似的方式分解 CSS。或者,作为一种较小的手段,只需str_replace()对先前的定义执行 a 并将$url重建结果 URL 后替换为http_build_query().

如果你真的,真的只是不关心它的其余部分......

<?php

$data = "cursor:pointer; background:url(http://maps.google.com/staticmap?center=38.7376583333,-9.1658583333&maptype=satellite&zoom=14&size=300x300&key=ABQIAAAAvQ9c8pqKsi8K2dzb7UM9MhS13VDmd70a9rmDETSCgg2iXt3XnhQSnX4vFKfWO-3vdWNV5HHBnSLWLQ&sensor=true&hl=pt) no-repeat";

$center = substr($data, strpos($data, '?center=') + 8);
$center = substr($center, 0, strpos($center, '&'));

print_r($center);

?>

http://codepad.org/RiJHTX6p

编辑:那些最后一分钟的更新总是让你......修复。

substr()单独的行的开头/结尾进行匹配,因此第二个strpos()是相对于第一个匹配的结果。我认为这样做的方式更容易理解,并且性能(我相信)应该不会有显着差异。此外,它将处理查询字符串对的不同顺序,因为第二个“相关”&检查首先在键之后。否则,我相信您最好分解查询字符串。

如果你想要mid()VB 和 VBA 中的函数,你可以使用:

<?php

function mid($start, $end, $str) {
    $str = substr($str, strpos($str, $start) + strlen($start));
    return substr($str, 0, strpos($str, $end));
}

$data = "cursor:pointer; background:url(http://maps.google.com/staticmap?center=38.7376583333,-9.1658583333&maptype=satellite&zoom=14&size=300x300&key=ABQIAAAAvQ9c8pqKsi8K2dzb7UM9MhS13VDmd70a9rmDETSCgg2iXt3XnhQSnX4vFKfWO-3vdWNV5HHBnSLWLQ&sensor=true&hl=pt) no-repeat";

print_r(mid('?center=', '&', $data));

?>

http://codepad.org/2rjmC4PL

于 2012-09-09T17:02:50.073 回答
1

substr接受三个参数,最后一个是返回字符串的长度(从起始位置开始)。

所以在你的情况下,你会使用$b = substr($string, strpos($string, $inico) + 8, 27);.

但是,如果您正在像这样操作字符串,它可能会支付(当 URL 样式更改时不那么令人头疼)parse_urlexplode提取参数。

这是一个例子:

$originalString = "cursor:pointer; background:url(http://maps.google.com/staticmap?center=38.7376583333,-9.1658583333&maptype=satellite&zoom=14&size=300x300&key=ABQIAAAAvQ9c8pqKsi8K2dzb7UM9MhS13VDmd70a9rmDETSCgg2iXt3XnhQSnX4vFKfWO-3vdWNV5HHBnSLWLQ&sensor=true&hl=pt) no-repeat";

$url = substr($originalString, strpos($originalString, "url(") + 4);
$url = substr($url, 0, strrpos($url, ")"));

$params = parse_url($url, PHP_URL_QUERY);
$paramArray = explode("&", $params);

$paramArray现在包含 URL 的 GET 参数的名称-值-对。

于 2012-09-09T16:39:59.967 回答
0

substr()

echo substr($s, 0, strpos($s, '?') + 1) . substr($s, strpos($s, '&') + 1);

preg_replace()

echo preg_replace('~(\?center=.+?&)~', '?', $string);
于 2012-09-09T17:04:19.010 回答
0
$str = "cursor:pointer; background:url(http://maps.google.com/staticmap?center=38.7376583333,-9.1658583333&maptype=satellite&zoom=14&size=300x300&key=ABQIAAAAvQ9c8pqKsi8K2dzb7UM9MhS13VDmd70a9rmDETSCgg2iXt3XnhQSnX4vFKfWO-3vdWNV5HHBnSLWLQ&sensor=true&hl=pt) no-repeat";
$str = explode('center=', $str);
$str = explode('&maptype=', $str[1]);
$str = $str[0];
echo $str;

小提琴: http ://www.phpfiddle.org/main/code/6rs-5hh

此外,如果您想在之后分别获取 LAT 和 LONG,请在将它们分配给后使用此代码$str

$str = explode(',', $str);
$lat = $str[0];
$long = $str[1];
echo 'Lattitude ' . $lat . ' and Longtitude ' . $long;
于 2012-09-09T16:41:46.330 回答