让我们假设我们有这个网址:mywebsite.com/product.php?id=201
为了确保GET操作的安全,我检查id(它必须是数字(,并检查url中是否只有一个参数,我禁止添加这样的参数:
$whitelist = array('id');
if (test_fields($whitelist,$_GET)) {
}
function test_fields($wl, $dt) {
$result = True;
foreach ($dt as $key=>$item) {
if (!in_array($key, $wl)) {
$result = False;
}
else {$result = True;}
}
return $result;
}
问题是,当我们在facebook上分享这个链接时,默认情况下会添加参数,比如mywebsite.com/product.php?id=201&fbclid=DIwAR0kna40q
这会产生一个错误,因为我已经禁止添加参数
你知道怎么避开这个吗?
除此之外,我还有一个问题为了管理SEO方面,我使用页面的($_SERVER['REQUEST_uri'](检索uri,并基于uri从数据库中检索SEO元素(标题、描述、h1、索引等(但由于当facebook添加参数时,uri会发生变化,我在数据库中不再找到这个uri
你有办法解决这个问题吗?如果没有,有办法更好地管理这类页面的seo方面吗?
谢谢
保持简单就是方法。
如果你得到的参数像:
URI?id=1&id2=2&id3=3
,并且您只需要id只需要这一个,如果还有10个也没关系。
1.标准
<?php
$GET_ID = ($_GET['id']);
?>
2.如果不存在,设置一些
<?php
$GET_ID = ($_GET['id'] ?? 'SETSOMETHING');
?>
3.如果不存在,请设置一些内容,并且您可以设置字符串长度的限制
<?php
$GET_ID = substr(($_GET['id'] ?? 'SETSOMETHING'), 0, 30);
?>
4.如果不存在设置,请使用函数执行某些操作,然后可以设置字符串长度的限制
<?php
$GET_ID = substr(MYFUNCTION($_GET['id'] ?? 'SETSOMETHING'), 0, 50);
?>
对于您的URI,请使用(php.net(中的phpparse_urlparse_url
只需选择您需要的。
<?php
$url = 'http://username:password@hostname:9090/path?arg=value#anchor';
var_dump(parse_url($url));
var_dump(parse_url($url, PHP_URL_SCHEME));
var_dump(parse_url($url, PHP_URL_USER));
var_dump(parse_url($url, PHP_URL_PASS));
var_dump(parse_url($url, PHP_URL_HOST));
var_dump(parse_url($url, PHP_URL_PORT));
var_dump(parse_url($url, PHP_URL_PATH));
var_dump(parse_url($url, PHP_URL_QUERY));
var_dump(parse_url($url, PHP_URL_FRAGMENT));
?>