isset不适用于带有撇号的变量

时间:2015-06-22 21:20:07

标签: php .htaccess

这是代码无法正常工作的确切部分

if(isset($_GET['Champion'])){
        $championget = trim(urldecode($_GET['Champion']));
        echo $championget;
        $championexists = $conn->prepare("SELECT * FROM champions where Champion = ?");
        $championexists->bind_param('s', $championget);
        $championexists->execute();
        $championexistsresult = $championexists->get_result();
        if(mysqli_num_rows($championexistsresult)==0){
            echo 'Champion doesn\'t exist'; 
            exit;
        }elseif(mysqli_num_rows($championexistsresult)>=1)
            {
                //Continue here
                include('php/champion.php');
                exit;
            }

    }

使用http://localhost/leaguenotes/Cassiopeia等常规名称正常工作 但我的名字有'在他们中,这就是为什么我编码他们所以他们看起来像这样http://localhost/leaguenotes/Cho%27Gath但这会重定向到文件夹索引

这也是可能有问题的htaccess

ErrorDocument 404 /
ErrorDocument 403 /

Options ALL -Indexes

RewriteEngine On

RewriteRule ^([0-9/.]+)$ index.php?Patch_No=$1 [NC,L]

RewriteRule ^([0-9/.]+)&([0-9a-zA-Z_-]+)$ index.php?Patch_No=$1&tab=$2 [NC,L]

RewriteRule ^patches php/patches.php [NC,L]

RewriteRule ^([0-9a-zA-Z_-]+)$ index.php?Champion=$1 [NC,L]

这似乎是因为%27我的代码没有把它作为一个变量

2 个答案:

答案 0 :(得分:2)

在通过重写规则发送URI之前,任何URL编码(例如%27)都会被解码,这意味着您无法尝试与%27匹配,而是与解码的内容进行匹配。 / p>

所以代替正则表达式:

[0-9a-zA-Z_-]

你需要包含撇号

['0-9a-zA-Z_-]

答案 1 :(得分:0)

不要使用它们。纯粹坚持A-Za-z0-9和_。 (您可以使用其他一些字符,但它们是保留的并且具有特殊含义)。