2015-06-22 75 views
0

变量工作时,此代码的确切部分不起作用isset不带撇号

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我的代码不作为变量interper这个

+0

%,因为它不是该组将不匹配您的正则表达式模式。 –

+0

是否有将%添加到模式的简单方法? – Higeath

+0

当然,让它。例如'^([0-9a-zA-Z _% - ] +)$'编辑:确保连字符是最后一个,或者逃脱。 –

回答

0

不要使用它们。纯粹贴在A-ZA-Z0-9和_上。 (还有一些其他角色可以使用,但是它们是保留的并且有特殊的含义)。

+0

你是什么意思,我不应该使用撇号?它需要它是某个冠军的名称的一部分,这就是为什么我使用urlencode和urldecode – Higeath

+0

尝试这个[0-9a-zA-Z_-']在你的.htaccess – Omare

2

任何网址编码(例如%27)在通过重写规则发送URI之前得到解码,这意味着您不能尝试与%27匹配,而是与解码的内容匹配。

所以不是正则表达式:

[0-9a-zA-Z_-] 

需要包括撇号

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

这是否意味着如果你真的想要为了匹配具有'%27'或其他实体的东西,但其目的是作为文字,您可能会看到奇怪的行为? –

+0

还有一件事我该如何处理名义上的空间? – Higeath

+0

@JonStirling不知道我理解你的问题。如果你想匹配'%27'(编码的URL看起来像'%2527',因为'%'被编码了),你需要跳过'%'。 –