这里例子是从一个带有网址的字符串中提取出网址,例子中除了英文不会变,里面的数字参数都是会根据发起的请求参数而改变的。
这是带有网址的字符串:
<script type='text/javascript'>var RIOdItKX='https://c.duomai.com/track.php?site_id=94527&aid=3087&euid=&t=http%3A%2F%2Fyou.163.com%2Fitem%2Fdetail%3Fid%3D1682032';window.location.href=RIOdItKX;</script>
我想要提取的是这一段:http%3A%2F%2Fyou.163.com%2Fitem%2Fdetail%3Fid%3D1682032
具体思路为首先通过strripos()函数获取想要提取的字符串的前缀的位置,然后利用获取到的位置通过substr()函数返回位置后面的字符串,最后通过stristr()把后面的多余部分删掉。
代码如下:
$goodsAddress = strripos($html, '&t=');//从字符串中通过头部标识获取网址的起始地址
上面代码返回结果为:104;意思是‘&t=‘这个字符在字符串($html)中的位置
$goodsAddress = substr($html, $goodsAddress);//提取起始地址后面的字符串
上面代码返回结果为:
&t=http%3A%2F%2Fyou.163.com%2Fitem%2Fdetail%3Fid%3D1682032';window.location.href=GnCCGDxB;</script>
意思是返回字符串位于104后面的字符串
$goodsAddress = str_replace('&t=', '', $goodsAddress);//去掉网址前面的'?t='
$goodsAddress = str_replace('%3A%2F%2F', '://', $goodsAddress);//转换编码
$goodsAddress = str_replace('%3F', '?', $goodsAddress);//转换编码
$goodsAddress = str_replace('%3D', '=', $goodsAddress);//转换编码
$goodsAddress = str_replace('%2F', '/', $goodsAddress);//转换编码
$goodsAddress = stristr($goodsAddress, '\';window', true);//去掉';window之后的字符串,包括';window,然后就只剩下干净的网址咯
上面代码都是替换字符的,最后结果如下
"http://you.163.com/item/detail?id=1682032"
我这个方法是提取字符串中有随机数的。如果是固定字符串直接用str_replace替换掉不想要的就好了。