我有PHP代码,根据URL中的查询字符串更改页面标题。但是,此查询字符串由递增的数字组成,当它包含数字10(或11,12等)时,它将使用数字1的变量。有没有办法让strpos看看是否存在差异?
段:
<?php
$fullurl = "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
$title = "";
$meta = "";
if (strpos($fullurl,'planes-trains-automobiles') !== false) {
if (strpos($fullurl,'mag=1') !== false) {
$title = "Title 1";
$meta = "Meta 1";
}
else if (strpos($fullurl,'mag=2') !== false) {
$title = "Title 2";
$meta = "Meta 2";
}
...
else if (strpos($fullurl,'mag=10') !== false) {
$title = "Title 10";
$meta = "Meta 10";
}
示例:
http://myurl-here.com?mag=10给了我Title 1
而非Title 10
。
答案 0 :(得分:3)
你可以使用$ _GET ['mag']。为了安全起见,您可以通过
检查它是否为整数$is_valid = is_numeric($_GET['mag']) && is_int(1*$_GET['mag']);
或
$is_valid = preg_match('/^[\d]+$/',$_GET['mag']);
所以你会这样做:
if ($is_valid):
die('wow so insecure, maybe');
else:
//do whatever you want with $_GET['mag']
答案 1 :(得分:2)
不要通过匹配完整网址的字符串工作,使用解析的值!对于当前请求,您只需使用$_GET['mag']
。
if (isset($_GET['mag']) && ctype_digit($_GET['mag'])) {
$title = 'Title ' . $_GET['mag'];
$meta = 'Meta ' . $_GET['mag'];
}
或者可能:
$titles = array(
1 => 'Title 1',
2 => 'Title 2',
...
);
if (isset($titles[$_GET['mag']])) {
$title = $titles[$_GET['mag']];
}
或者:
switch ($_GET['mag']) {
case 1 :
...
case 2 :
...
...
}
答案 2 :(得分:1)
虽然不是这样的答案,但您可以通过重新排序IF / ELSE条款来解决问题,以便在检查1之前检查10,11 ......:
<?php
if (strpos($fullurl,'planes-trains-automobiles') !== false) {
if (strpos($fullurl,'mag=10') !== false) {
$title = "Title 10";
$meta = "Meta 10";
}
else if (strpos($fullurl,'mag=11') !== false) {
$title = "Title 11";
$meta = "Meta 11";
}
...
else if (strpos($fullurl,'mag=1') !== false) {
$title = "Title 1";
$meta = "Meta 1";
}
答案 3 :(得分:1)
为什么不用preg_match
提取数字?
preg_match('/\d+/', $url, $m);
$title = "Title ".$m[0];
将匹配
$url= 'http://myurl-here.com?mag=10';
$url= 'http://myurl-here.com?mag=1';
等
答案 4 :(得分:0)
if (strpos($fullurl,'mag=10') !== false) {
$title = "Title 10";
$meta = "Meta 10";
}
else if (strpos($fullurl,'mag=1') !== false) {
$title = "Title 1";
$meta = "Meta 1";
}
else if (strpos($fullurl,'mag=2') !== false) {
$title = "Title 2";
$meta = "Meta 2";
}
这样if if永远不会达到mag = 1,如果mag = 10(11,12等,如果放在1之前)已被选中。