我的客户通过服务与数据库联系。当我执行某些操作时,我使用file_get_contents
调用服务URL,然后处理响应。
我认为当用户从Google搜索结果进入网站时,我认为Google会将一些参数添加到属于file_get_contents
的服务网址。
例如, 应该如此,
file_get_contents(service.domain/service_name?param1=0)
但谷歌在网址末尾添加了一些奇怪的参数。像这样:
file_get_contents(service.domain/service_name?param1=0&force=1)
我看到了两三个奇怪的参数,
force = 1
gclid=CNC-jvTapbcCFaaj
我不知道如何处理和删除这些参数。
如何在使用file_get_contents调用URL之前删除这些奇怪的参数?
这是我的功能:
public function getWhere($keyword)
{
$locale = session('locale');
if($locale != "en" && $locale != "")
{
$locale = "_".session('locale');
}else{
$locale = "";
}
$page = file_get_contents(getenv('API_URL')."station_info?search.url=".$keyword);
$page = json_decode($page);
$page = (array) $page->rows;
$station = $page[0];
if($station->search->status == 1)
{
return redirect('/');
}
return view('station', compact('station', 'locale'));
}
奇怪的参数会将自己添加到网址的末尾。
修改
我认为有人正在尝试某种方式。 $ keyword必须带一个字符串,即站名,例如伦敦。 但有人试图发送伦敦& force = 1所以我必须检查$ keyword变量。
答案 0 :(得分:-1)
您可以通过parse_url
功能解析网址,删除不需要的参数或只保留您想要的参数并构建网址
使用parse_url
函数后,您可能需要通过query
函数解析parse_str
,因此代码如下所示:
$urlParsed = parse_url("service.domain/service_name?param1=0&force=1");
$params = parse_str ($urlParsed['query']);
$newParams = [];
$neededParams = ['param1', 'param2'];
foreach ($neededParams as $p) {
if (isset($params[$p])) {
$newParams[$p] = $params[$p];
}
}
$newUrl = $urlParsed['scheme'] . '://' . $urlParsed['host'] . $urlParsed['path'] . '?' . http_build_query($newParams);
file_get_contents($newUrl);
我没有对该代码进行测试,但我希望这个想法很明确,您可以根据需要对其进行修改。