我怎样才能得到strpos()来区分' 1'和' 10'在一个字符串?

时间:2014-01-14 11:16:48

标签: php

我有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

5 个答案:

答案 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之前)已被选中。