得到一个字符串的中间 - 删除左右

时间:2012-09-09 16:36:08

标签: php 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"

我想删除纬度和经度。所以我想剪切字符串的左边,直到"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 个答案:

答案 0 :(得分: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(),并在使用http_build_query()重建结果网址后替换$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";

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

print_r($center);

?>

http://codepad.org/RiJHTX6p

编辑:最后一分钟的更新总能让你......固定。

{/ 1}}在单独的行上开头/结尾匹配,因此第二个substr()相对于第一个匹配的结果。我认为这样做的方式更容易理解,性能(我相信)不应该有太大的不同。此外,它将处理查询字符串对的不同顺序,因为第二个“相关”strpos()检查是在密钥之后的第一个。否则,我相信你最好分解查询字符串。

如果你喜欢VB和VBA中的&函数,你可以使用:

mid()

http://codepad.org/2rjmC4PL

答案 1 :(得分: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参数的名称 - 值对。

答案 2 :(得分: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;

答案 3 :(得分:0)

SUBSTR()

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

的preg_replace()

echo preg_replace('~(\?center=.+?&)~', '?', $string);