php无法使用特殊字符或空格从URL获取mysql结果?

时间:2014-07-16 13:15:26

标签: php mysql .htaccess

我一直试图解决这个问题2天,但没有用。

基本上,我正在根据上一页传递的URL中的内容尝试$_GET来自mysql的结果。

网址如下:http://mydomain.com/manufacturer/abc

要实现此网址,我使用的.htaccess工作正常。

但是如果网址有empty space-或任何其他特殊字符,我的php文件就不会从mysql数据库中获取结果。

所以这不会起作用:

http://mydomain.com/manufacturer/a-b-c

或者这不会起作用:

http://mydomain.com/manufacturer/a b c

也不是这样:

http://mydomain.com/manufacturer/a+bc

等等......

我使用的是smarty,到目前为止,这是一个非常直接的过程,但现在它已经证实有点困难。

我的php文件如下所示:

if (isset($_GET['man'])) {
$man = $_GET['man'];
if( ! $stmt = $db_conx->prepare("SELECT id, man, product_name FROM `$TabelName` WHERE `man` = ?") ) {
  die( $db_conx->error );
}

$stmt->bind_param('s', $man);
if ( ! $stmt->execute() ) {
  die( $stmt->error );
}
$stmt->bind_result($id, $man, $product_name);
$stmt->store_result();

while($stmt->fetch()) {
    $value[] = array('id'=>$id, 'man'=>$man, 'product_name'=>$product_name);
}
}


// Assign this array to smarty...
$smarty->assign('man', $value);



// Assign this array to smarty...
$smarty->assign('$man', $value);

}

这是我的htaccess文件:

RewriteCond %(REQUEST_FILENAME) !-f
RewriteCond %(REQUEST_FILENAME) !-d
RewriteRule ^manufacturer/([a-zA-Z0-9]+)$ manufacturers.php?manu=$1
RewriteRule ^manufacturer/([a-zA-Z0-9]+)/$ manufacturers.php?manu=$1

我尽可能地尝试了urlencodeurldecode,但似乎没有任何效果。

有人可以就此问题提出建议吗?

提前致谢

2 个答案:

答案 0 :(得分:1)

试试这个:

RewriteRule ^manufacturer/(.*)/?$ manufacturers.php?manu=$1

注意/?,你不需要第二条规则,这件事适合你。

答案 1 :(得分:1)

DO

RewriteRule ^manufacturer/(.+)/?$ manufacturers.php?manu=$1

在制造商/匹配后,这意味着任何一次或多次。